这段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,我需要指定数据类型,但是在指定数据类型时却抛出了引发本帖的错误信息。
从你展示的代码中,我们唯一能看出来的是,你正试图从一个形状不像多维数组的列表中创建一个数组。 比如说
numpy.array([[1,2], [2, 3, 4]])
或
numpy.array([[1,2], [2, [3, 4]]])
会产生这个错误信息,因为输入列表的形状不是一个可以变成多维数组的(通用)"box"。 所以可能UnFilteredDuringExSummaryOfMeansArray
包含不同长度的序列。
编辑。这个错误信息的另一个可能的原因是试图使用一个字符串作为float
类型的数组中的一个元素。
numpy.array([1.2, "abc"], dtype=float)
根据你的编辑,这就是你所尝试的。 如果你真的想让一个NumPy数组同时包含字符串和浮点数,你可以使用dtype object
,这样数组就可以容纳任意的Python对象。
numpy.array([1.2, "abc"], dtype=object)
如果不知道你的代码要完成什么,我无法判断这是否是你想要的。
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. 试图将一个numpy数组的长度> 1塞进一个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会回应说它不知道如何用一个序列来设置一个数组元素。