Este código de 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()
Lanza este mensaje de error:
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.
¿Alguien puede mostrarme qué hacer para solucionar el problema en el código roto anterior para que deje de arrojar un mensaje de error?
EDITAR: hice un comando de impresión para obtener el contenido de la matriz, y esto es lo que imprimió:
UnFilteredDuringExSummaryOfMeansArray es:
[['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]]
A mí me parece una matriz de 5 filas por 13 columnas, aunque el número de filas es variable cuando se ejecutan diferentes datos a través del script. Con estos mismos datos que estoy agregando en esto.
EDIT 2 : Sin embargo, el script está arrojando un error. Así que no creo que su idea explique el problema que está sucediendo aquí. Gracias de cualquier forma. ¿Alguna otra idea?
EDITAR 3:
Para su información, si reemplazo esta línea de código problemática:
RRDuringArray = p.array(UnFilteredDuringExSummaryOfMeansArray,dtype=p.float64)[1:,3]
con esto en su lugar:
RRDuringArray = p.array(UnFilteredDuringExSummaryOfMeansArray)[1:,3]
Entonces esa sección del script funciona bien sin arrojar un error, pero luego esta línea de código más adelante:
p.ylim(.5*RRDuringArray.min(),1.5*RRDuringArray.max())
Lanza este error:
File "mypath\mypythonscript.py", line 3631, in CreateSummaryGraphics
p.ylim(.5*RRDuringArray.min(),1.5*RRDuringArray.max())
TypeError: cannot perform reduce with flexible type
Entonces, puede ver que necesito especificar el tipo de datos para poder usar ylim en matplotlib, pero al especificar el tipo de datos, aparece el mensaje de error que inició esta publicación.
Respuestas:
Del código que nos mostró, lo único que podemos decir es que está tratando de crear una matriz a partir de una lista que no tiene la forma de una matriz multidimensional. Por ejemplo
o
generará este mensaje de error, porque la forma de la lista de entrada no es una "caja" (generalizada) que se puede convertir en una matriz multidimensional. Entonces, probablemente
UnFilteredDuringExSummaryOfMeansArray
contiene secuencias de diferentes longitudes.Editar : Otra posible causa de este mensaje de error es intentar usar una cadena como elemento en una matriz de tipo
float
:Eso es lo que está intentando según su edición. Si realmente desea tener una matriz NumPy que contenga cadenas y flotantes, puede usar el dtype
object
, que permite que la matriz contenga objetos arbitrarios de Python:Sin saber qué logrará su código, no puedo juzgar si esto es lo que desea.
fuente
__getitem__
como se especifica aquí: github.com/numpy/numpy/issues/5100El Python ValueError:
Significa exactamente lo que dice: estás tratando de agrupar una secuencia de números en una sola ranura numérica. Se puede lanzar bajo varias circunstancias.
1. Cuando pasa una tupla o lista de Python para que se interprete como un elemento de matriz numpy:
2. Al intentar meter una longitud de matriz numpy> 1 en un elemento de matriz numpy:
Se está creando una matriz numpy, y numpy no sabe cómo agrupar tuplas o matrices de valores múltiples en ranuras de elementos individuales. Espera que lo que sea que le des para evaluar a un solo número, si no lo hace, Numpy responde que no sabe cómo configurar un elemento de matriz con una secuencia.
fuente
En mi caso, recibí este error en Tensorflow, la razón fue que estaba tratando de alimentar una matriz con diferentes longitudes o secuencias:
ejemplo:
Y si mi matriz es:
Entonces obtendré un error:
pero si hago relleno entonces:
Ahora funciona.
fuente
Para aquellos que están teniendo problemas con problemas similares en Numpy, una solución muy simple sería:
definir
dtype=object
al definir una matriz para asignarle valores. por ejemplo:fuente
Edit
parte de la respuesta aceptada?En mi caso, el problema era otro. Intentaba convertir listas de listas de int a array. El problema era que había una lista con una longitud diferente a las demás. Si quieres probarlo, debes hacer:
En mi caso, la referencia de longitud fue 560.
fuente
En mi caso, el problema era con un diagrama de dispersión de un marco de datos X []:
fuente
Cuando la forma no es regular o los elementos tienen diferentes tipos de datos, el
dtype
argumento pasado a np.array solo puede serloobject
.``
fuente