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 corrigir o problema no código quebrado acima, para que ele pare de lançar uma mensagem de erro?
EDIT: Eu fiz um comando de impressão para obter o conteúdo da matriz, e é isso que foi impresso:
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 uma matriz de 5 linhas por 13 colunas para mim, embora o número de linhas seja variável quando dados diferentes são executados pelo script. Com esses mesmos dados que estou adicionando.
EDIT 2 : No entanto, o script está lançando um erro. Portanto, não acho que sua ideia explique o problema que está acontecendo aqui. Obrigado mesmo assim. Alguma outra ideia?
EDIT 3:
Para sua informação, se eu substituir esta linha de código problemática:
RRDuringArray = p.array(UnFilteredDuringExSummaryOfMeansArray,dtype=p.float64)[1:,3]
com isso:
RRDuringArray = p.array(UnFilteredDuringExSummaryOfMeansArray)[1:,3]
Em seguida, essa seção do script funciona bem sem gerar um erro, mas essa linha de código fica mais abaixo:
p.ylim(.5*RRDuringArray.min(),1.5*RRDuringArray.max())
Lança 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
Portanto, você pode ver que preciso especificar o tipo de dados para poder usar o ylim no matplotlib, mas especificar o tipo de dados está lançando a mensagem de erro que iniciou esta postagem.
Respostas:
Pelo código que você nos mostrou, a única coisa que podemos dizer é que você está tentando criar uma matriz a partir de uma lista que não tem o formato de uma matriz multidimensional. Por exemplo
ou
gerará essa mensagem de erro, porque o formato da lista de entrada não é uma "caixa" (generalizada) que pode ser transformada em uma matriz multidimensional. Então provavelmente
UnFilteredDuringExSummaryOfMeansArray
contém seqüências de diferentes comprimentos.Edit : Outra causa possível para esta mensagem de erro está tentando usar uma string como um elemento em uma matriz do tipo
float
:É isso que você está tentando de acordo com a sua edição. Se você realmente deseja ter um array NumPy contendo strings e floats, você pode usar o dtype
object
, que permite que o array armazene objetos Python arbitrários:Sem saber o que seu código deve realizar, não posso julgar se é isso que você deseja.
fonte
__getitem__
conforme especificado aqui: github.com/numpy/numpy/issues/5100O ValueError do Python:
Significa exatamente o que diz: você está tentando inserir uma sequência de números em um único slot de número. Pode ser lançado sob várias circunstâncias.
1. Quando você passa uma tupla ou lista python para ser interpretada como um elemento de matriz numpy:
2. Tentando compactar um comprimento numpy numérico> 1 em um elemento numpy numérico:
Um array numpy está sendo criado e o numpy não sabe como agrupar tuplas ou matrizes de valores múltiplos em slots de elemento único. Ele espera que seja avaliado o que você avaliar para um único número; caso contrário, o Numpy responderá que não sabe como definir um elemento da matriz com uma sequência.
fonte
No meu caso, recebi esse erro no Tensorflow, a razão pela qual eu estava tentando alimentar uma matriz com diferentes comprimentos ou sequências:
exemplo:
E se minha matriz for:
Então eu receberei o erro:
mas se eu fizer preenchimento então:
Agora está funcionando.
fonte
para aqueles que estão tendo problemas com problemas semelhantes no Numpy, uma solução muito simples seria:
definindo
dtype=object
ao definir uma matriz para atribuir valores a ela. por exemplo:fonte
Edit
parte da resposta aceita?No meu caso, o problema era outro. Eu estava tentando converter listas de listas de int para matriz. O problema era que havia uma lista com um comprimento diferente das outras. Se você quiser provar isso, deve fazer:
No meu caso, a referência de comprimento era 560.
fonte
No meu caso, o problema estava com um gráfico de dispersão de um dataframe X []:
fonte
Quando a forma não é regular ou os elementos têm tipos de dados diferentes, o
dtype
argumento passado para np.array somente pode serobject
.``
fonte