此Python代码:

import numpy as p

def firstfunction():
    UnFilteredDuringExSummaryOfMeansArray = []
    MeanOutputHeader=['TestID','ConditionName','FilterType','RRMean','HRMean',
                      'dZdtMaxVoltageMean','BZMean','ZXMean','LVETMean','Z0Mean',
                      'StrokeVolumeMean','CardiacOutputMean','VelocityIndexMean']
    dataMatrix = BeatByBeatMatrixOfMatrices[column]
    roughTrimmedMatrix = p.array(dataMatrix[1:,1:17])


    trimmedMatrix = p.array(roughTrimmedMatrix,dtype=p.float64)  #ERROR THROWN HERE


    myMeans = p.mean(trimmedMatrix,axis=0,dtype=p.float64)
    conditionMeansArray = [TestID,testCondition,'UnfilteredBefore',myMeans[3], myMeans[4], 
                           myMeans[6], myMeans[9], myMeans[10], myMeans[11], myMeans[12],
                           myMeans[13], myMeans[14], myMeans[15]]
    UnFilteredDuringExSummaryOfMeansArray.append(conditionMeansArray)
    secondfunction(UnFilteredDuringExSummaryOfMeansArray)
    return

def secondfunction(UnFilteredDuringExSummaryOfMeansArray):
    RRDuringArray = p.array(UnFilteredDuringExSummaryOfMeansArray,dtype=p.float64)[1:,3]
    return

firstfunction()


引发此错误消息:

File "mypath\mypythonscript.py", line 3484, in secondfunction
RRDuringArray = p.array(UnFilteredDuringExSummaryOfMeansArray,dtype=p.float64)[1:,3]
ValueError: setting an array element with a sequence.


谁能告诉我该怎么做修复上面的破损代码中的问题,使其不再引发错误消息?


编辑:
我执行了一条打印命令来获取矩阵的内容,并且这是它打印出来的结果:

UnFilteredDuringExSummaryOfMeansArray是:

[['TestID', 'ConditionName', 'FilterType', 'RRMean', 'HRMean', 'dZdtMaxVoltageMean', 'BZMean', 'ZXMean', 'LVETMean', 'Z0Mean', 'StrokeVolumeMean', 'CardiacOutputMean', 'VelocityIndexMean'],
[u'HF101710', 'PreEx10SecondsBEFORE', 'UnfilteredBefore', 0.90670000000000006, 66.257731979420001, 1.8305673000000002, 0.11750000000000001, 0.15120546389880002, 0.26870546389879996, 27.628261216480002, 86.944190346160013, 5.767261352345999, 0.066259118585869997],
[u'HF101710', '25W10SecondsBEFORE', 'UnfilteredBefore', 0.68478571428571422, 87.727887206978565, 2.2965444125714285, 0.099642857142857144, 0.14952476549885715, 0.24916762264164286, 27.010483303721429, 103.5237336525, 9.0682762747642869, 0.085022572648242867],
[u'HF101710', '50W10SecondsBEFORE', 'UnfilteredBefore', 0.54188235294117659, 110.74841107829413, 2.6719262705882354, 0.077705882352917643, 0.15051306356552943, 0.2282189459185294, 26.768787504858825, 111.22827075238826, 12.329456404418824, 0.099814258468417641],
[u'HF101710', '75W10SecondsBEFORE', 'UnfilteredBefore', 0.4561904761904762, 131.52996981880955, 3.1818159523809522, 0.074714285714290493, 0.13459344175047619, 0.20930772746485715, 26.391156337028569, 123.27387909873812, 16.214243779323812, 0.1205685359981619]]


对我来说像一个5行13列的矩阵当通过脚本运行不同的数据时,行的行是可变的。使用我要在其中添加的相同数据。

编辑2:但是,脚本抛出错误。因此,我认为您的想法无法解释此处正在发生的问题。不过谢谢你还有其他想法吗?


编辑3:

仅供参考,如果我替换此有问题的代码行:

    RRDuringArray = p.array(UnFilteredDuringExSummaryOfMeansArray,dtype=p.float64)[1:,3]


改为:

    RRDuringArray = p.array(UnFilteredDuringExSummaryOfMeansArray)[1:,3]


然后脚本的这一部分可以正常工作而不会引发错误,但是下面这行代码又行了:

p.ylim(.5*RRDuringArray.min(),1.5*RRDuringArray.max())


引发此错误:

File "mypath\mypythonscript.py", line 3631, in CreateSummaryGraphics
  p.ylim(.5*RRDuringArray.min(),1.5*RRDuringArray.max())
TypeError: cannot perform reduce with flexible type


所以您可以看到我需要指定数据类型为了能够在matplotlib中使用ylim,但未指定数据类型会引发引发此帖子的错误消息。

评论

有人要删除此问题中所有不相关的细节吗?

#1 楼

从您展示给我们的代码中,我们唯一可以看出的就是您正在尝试从形状不像多维数组的列表中创建数组。例如,

numpy.array([[1,2], [2, 3, 4]])




numpy.array([[1,2], [2, [3, 4]]])


将产生此错误消息,因为输入列表的形状不是可以转化为多维数组的(通用)“盒子”。因此,UnFilteredDuringExSummaryOfMeansArray可能包含不同长度的序列。

编辑:此错误消息的另一个可能原因是尝试将字符串用作float类型的数组中的元素:

numpy.array([1.2, "abc"], dtype=float)


这是您根据编辑尝试的内容。如果您确实想拥有同时包含字符串和浮点数的NumPy数组,则可以使用dtype object,它使该数组可以容纳任意Python对象:

numpy.array([1.2, "abc"], dtype=object)


不带知道您的代码将完成什么,我无法判断这是否是您想要的。

评论


谢谢,但我不认为这是答案。当它引发上面的错误时,我已经添加了数组的内容。在我看来,这是一个盒子,当我将其粘贴到记事本中并逐行检查时。还有其他想法吗?

–MedicalMath
2011年1月13日21:06

您的修改似乎已经解决了我的问题。我需要设置dtype = object。非常感谢你。

–MedicalMath
2011-1-14的7:53

这个问题已经完全回答。

–MedicalMath
2011年1月14日,7:54

另一种可能是1.9中的一个问题,当构建实现__getitem__的对象数组(不一定是列表)时,如下所示:github.com/numpy/numpy/issues/5100

–破破烂烂
2014年11月21日19:13

#2 楼

Python ValueError:

ValueError: setting an array element with a sequence.


准确地表示了它的意思,您正在尝试将一系列数字塞入单个数字槽中。它可以在各种情况下抛出。

1。当您将python元组或列表传递为numpy数组元素时:

import numpy

numpy.array([1,2,3])               #good

numpy.array([1, (2,3)])            #Fail, can't convert a tuple into a numpy 
                                   #array element


numpy.mean([5,(6+7)])              #good

numpy.mean([5,tuple(range(2))])    #Fail, can't convert a tuple into a numpy 
                                   #array element


def foo():
    return 3
numpy.array([2, foo()])            #good


def foo():
    return [3,4]
numpy.array([2, foo()])            #Fail, can't convert a list into a numpy 
                                   #array element


2。通过尝试将长度大于1的numpy数组填充为numpy数组元素:

x = np.array([1,2,3])
x[0] = np.array([4])         #good



x = np.array([1,2,3])
x[0] = np.array([4,5])       #Fail, can't convert the numpy array to fit 
                             #into a numpy array element


正在创建numpy数组,并且numpy不知道如何对多值进行填充元组或数组放入单个元素插槽。它希望您给它提供的任何结果都可以求一个数字,如果不然,Numpy会回答说它不知道如何设置带有序列的数组元素。

评论


非常好的解释

– Tejas Shetty
2月24日9:13

#3 楼

就我而言,我在Tensorflow中遇到此错误,原因是我试图输入具有不同长度或序列的数组:

示例:

import tensorflow as tf

input_x = tf.placeholder(tf.int32,[None,None])



word_embedding = tf.get_variable('embeddin',shape=[len(vocab_),110],dtype=tf.float32,initializer=tf.random_uniform_initializer(-0.01,0.01))

embedding_look=tf.nn.embedding_lookup(word_embedding,input_x)

with tf.Session() as tt:
    tt.run(tf.global_variables_initializer())

    a,b=tt.run([word_embedding,embedding_look],feed_dict={input_x:example_array})
    print(b)


如果我的数组是:

example_array = [[1,2,3],[1,2]]


那么我将收到错误消息:

ValueError: setting an array element with a sequence.


但是如果我做填充,那么:

example_array = [[1,2,3],[1,2,0]]


现在可以了。

评论


我正在使用pyCUDA,并意外地将一个gpuarray元素分配给numpy array。我遇到了同样的错误。

– Tirtha R
18/12/26在17:18



@Aaditya Ura,如何进行这种填充,您能参考一下吗?

– pari
19-09-23在15:52

#4 楼

对于那些在Numpy中遇到类似问题的人,一个非常简单的解决方案是:

在定义一个数组以为其分配值时定义dtype=object。例如:

out = np.empty_like(lil_img, dtype=object)


评论


它与“编辑已接受答案”部分有何不同。

– Bal Krishna Jha
18年8月11日在7:10

#5 楼

就我而言,问题是另一个。我正在尝试将int列表转换为array。问题在于,一个列表的长度与其他列表不同。如果要证明它,则必须执行以下操作:

print([i for i,x in enumerate(list) if len(x) != 560])


对于我来说,长度参考是560。

#6 楼

就我而言,问题出在数据帧X []的散点图上:

ax.scatter(X[:,0],X[:,1],c=colors,    
       cmap=CMAP, edgecolor='k', s=40)  #c=y[:,0],

#ValueError: setting an array element with a sequence.
#Fix with .toarray():
colors = 'br'
y = label_binarize(y, classes=['Irrelevant','Relevant'])
ax.scatter(X[:,0].toarray(),X[:,1].toarray(),c=colors,   
       cmap=CMAP, edgecolor='k', s=40)


评论


一些更多的解释会很好。

– Tejas Shetty
2月24日9:15

值错误表示我们正在尝试将n元素数组(序列)加载到只有浮点数的单个数字插槽中。因此,您尝试使用序列设置数组元素。使用.toarray()我们将其放大为序列数组。 toarray()返回一个ndarray;

–马克斯·克莱纳(Max Kleiner)
2月25日在8:38



#7 楼

当形状不规则或元素具有不同的数据类型时,传递给np.array的dtype参数只能是object
 import numpy as np

# arr1 = np.array([[10, 20.], [30], [40]], dtype=np.float32)  # error
arr2 = np.array([[10, 20.], [30], [40]])  # OK, and the dtype is object
arr3 = np.array([[10, 20.], 'hello'])     # OK, and the dtype is also object
 

``

评论


欢迎来到SO。这个问题很老了,看来您的答案至少重复了另一个。如果您的答案实际上有所不同,请尝试添加一些更多的详细信息来说明操作方法。

–詹斯·埃里希(Jens Ehrich)
7月2日15:15

#8 楼

就我而言,我有一个嵌套列表作为要用作输入的序列。
首先检查:如果
df['nestedList'][0]

输出类似[1,2,3]的列表,则您有一个嵌套列表。
然后检查更改为输入df['nestedList'][0]时是否仍然出现错误。
那么下一步可能是使用
[item for sublist in df['nestedList'] for item in sublist]
将所有嵌套列表连接到一个未嵌套的列表中。嵌套列表中的内容是从如何从列表列表中制作平面列表中借来的。.