Este código 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()
Lança esta mensagem de erro:
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.
Alguém pode me mostrar o que fazer para consertar o problema no código quebrado acima para que ele pare de jogar uma mensagem de erro?
EDIT: Eu fiz um comando de impressão para obter o conteúdo da matriz, e isto é o que ela imprimiu:
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]]
Parece-me uma matriz de 5 linhas por 13 colunas, embora o número de linhas seja variável quando dados diferentes são executados através do script. Com estes mesmos dados que eu estou adicionando aqui.
*EDIT 2**: No entanto, o guião está a atirar um erro. Portanto, não creio que a sua ideia explique o problema que está a acontecer aqui. Obrigado, porém. Alguma outra ideia?
EDIT 3:
FYI, se eu substituir esta linha de código de problema:
RRDuringArray = p.array(UnFilteredDuringExSummaryOfMeansArray,dtype=p.float64)[1:,3]
com isto em vez disso:
RRDuringArray = p.array(UnFilteredDuringExSummaryOfMeansArray)[1:,3]
Então essa seção do script funciona bem sem atirar um erro, mas depois essa linha de código mais abaixo:
p.ylim(.5*RRDuringArray.min(),1.5*RRDuringArray.max())
Atira este erro:
File "mypath\mypythonscript.py", line 3631, in CreateSummaryGraphics
p.ylim(.5*RRDuringArray.min(),1.5*RRDuringArray.max())
TypeError: cannot perform reduce with flexible type
Então você pode ver que eu preciso especificar o tipo de dados para poder usar o ylim em matplotlib, mas ainda assim especificar o tipo de dados é lançar a mensagem de erro que iniciou este post.
Pelo código que você nos mostrou, a única coisa que podemos dizer é que você está tentando criar um array a partir de uma lista que é't com a forma de um array multidimensional. Por exemplo
numpy.array([[1,2], [2, 3, 4]])
ou
numpy.array([[1,2], [2, [3, 4]]])
irá gerar esta mensagem de erro, porque a forma da lista de entrada é't a (generalizada) "box" que pode ser transformada em um array multidimensional. Então provavelmente `UnFilteredDuringExSummaryOfMeansArray' contém seqüências de diferentes comprimentos.
**Editar***: Outra causa possível para esta mensagem de erro é tentar utilizar uma string como elemento de um array do tipo `float':
numpy.array([1.2, "abc"], dtype=float)
Isso é o que você está tentando de acordo com sua edição. Se você realmente quer ter um array NumPy contendo tanto strings quanto floats, você poderia usar o tipo dtype object
, que permite que o array contenha objetos Python arbitrários:
numpy.array([1.2, "abc"], dtype=object)
Sem saber o que o seu código deve conseguir, eu posso't julgar se é isto que você quer.
O valor PythonError:
ValueError: setting an array element with a sequence.
Significa exatamente o que diz, você'está tentando enfiar uma seqüência de números em um único espaço de números. Pode ser atirado em várias circunstâncias.
1. Quando você passa um tuple python ou lista para ser interpretado como um elemento de matriz numérica:
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. Tentando enfiar um elemento de matriz numérica de comprimento > 1 num elemento de matriz numérica:
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
Uma matriz numpia está sendo criada, e a numpia não'não sabe como enfiar tufos ou arrays multivalorizados em slots de um único elemento. Ele espera que o que quer que você dê a ele avalie para um único número, se ele não't, Numpy responde que ele não't sabe como definir um elemento de array com uma sequência.
No meu caso, o problema era outro. Eu estava a tentar converter listas de int para array. O problema era que havia uma lista com um comprimento diferente das outras. Se queres provar isso, tens de o fazer:
print([i for i,x in enumerate(list) if len(x) != 560])
No meu caso, a referência de comprimento era 560.