这个 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]]) # wrong!
或者
numpy.array([[1,2], [2, [3, 4]]]) # wrong!
将产生此错误消息,因为输入列表的形状不是可以变成多维数组的(广义)“框”。所以可能UnFilteredDuringExSummaryOfMeansArray包含不同长度的序列。
UnFilteredDuringExSummaryOfMeansArray
此错误消息的另一个可能原因是尝试将字符串用作类型数组中的元素float:
float
numpy.array([1.2, "abc"], dtype=float) # wrong!
根据您的编辑,这就是您正在尝试的。如果你真的想要一个包含字符串和浮点数的 NumPy 数组,你可以使用 dtype object,它使数组能够保存任意 Python 对象:
object
numpy.array([1.2, "abc"], dtype=object)
在不知道您的代码应该完成什么的情况下,我无法判断这是否是您想要的。