ValueError: configurando un elemento de matriz con una secuencia

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 me puede mostrar qué hacer para solucionar el problema en el código roto anterior para que deje de enviar un mensaje de error?


EDITAR: Hice un comando de impresión para obtener los contenidos de la matriz, y esto es lo que se 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]] 

Me parece una matriz de 5 filas por 13 columnas, aunque el número de filas es variable cuando se ejecutan datos diferentes a través del script. Con estos mismos datos los estoy agregando.

EDIT 2 : Sin embargo, el script está lanzando un error. Entonces, no creo que su idea explique el problema que está ocurriendo aquí. Gracias de cualquier forma. ¿Alguna otra idea?


EDITAR 3:

Para tu información, si sustituyo 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] 

Luego, esa sección del script funciona bien sin lanzar un error, pero luego esta línea de código más abajo en la línea:

 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, pueden ver que necesito especificar el tipo de datos para poder usar ylim en matplotlib, pero aún así, al especificar el tipo de datos, aparece el mensaje de error que inició esta publicación.

Por el código que nos mostró, lo único que podemos decir es que está intentando crear una matriz a partir de una lista que no tiene la forma de una matriz multidimensional. Por ejemplo

 numpy.array([[1,2], [2, 3, 4]]) 

o

 numpy.array([[1,2], [2, [3, 4]]]) 

producirá este mensaje de error, porque la forma de la lista de entrada no es un “cuadro” (generalizado) que se puede convertir en una matriz multidimensional. Así que, probablemente, UnFilteredDuringExSummaryOfMeansArray contiene secuencias de diferentes longitudes.

Edición : Otra posible causa de este mensaje de error es tratar de usar una cadena como un elemento en una matriz de tipo float :

 numpy.array([1.2, "abc"], dtype=float) 

Eso es lo que estás intentando de acuerdo a tu edición. Si realmente desea tener una matriz NumPy que contenga tanto cadenas como flotantes, podría usar el object dtype, que permite que la matriz contenga objetos Python arbitrarios:

 numpy.array([1.2, "abc"], dtype=object) 

Sin saber lo que tu código logrará, no puedo juzgar si esto es lo que quieres.

El ValueError de Python:

 ValueError: setting an array element with a sequence. 

Significa exactamente lo que dice, estás intentando agrupar una secuencia de números en un solo espacio para números. Puede ser lanzado bajo diversas circunstancias.

1. Cuando se pasa una tupla o lista de Python para ser interpretada como un elemento de matriz 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. Al tratar de meter una longitud de matriz numpy> 1 en un elemento de matriz 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 

Se está creando una matriz numpy, y numpy no sabe cómo agrupar tuplas o matrices multivalor en ranuras de un solo elemento. Espera que lo que le den para evaluar un solo número, si no lo hace, Numpy responde que no sabe cómo configurar un elemento de matriz con una secuencia.

En mi caso, obtuve este error en Tensorflow, la razón era que estaba tratando de alimentar una matriz con diferente longitud o secuencias:

ejemplo:

 import tensorflow as tf input_x = tf.placeholder(tf.int32,[None,None]) word_embedding = tf.get_variable('embeddin',shape=[len(vocab_),110],dtype=tf.float32,initializer=tf.random_uniform_initializer(-0.01,0.01)) embedding_look=tf.nn.embedding_lookup(word_embedding,input_x) with tf.Session() as tt: tt.run(tf.global_variables_initializer()) a,b=tt.run([word_embedding,embedding_look],feed_dict={input_x:example_array}) print(b) 

Y si mi matriz es:

 example_array = [[1,2,3],[1,2]] 

Entonces obtendré un error:

 ValueError: setting an array element with a sequence. 

pero si hago relleno entonces:

 example_array = [[1,2,3],[1,2,0]] 

Ahora funciona.

En mi caso, el problema era otro. Estaba intentando convertir listas de listas de int a array. El problema era que había una lista con una longitud diferente a otras. Si quieres probarlo, debes hacer:

 print([i for i,x in enumerate(list) if len(x) != 560]) 

En mi caso, la referencia de longitud era 560.

Para aquellos que tienen problemas con problemas similares en Numpy, una solución muy simple sería:

definiendo dtype=object al definir una matriz para asignarle valores. por ejemplo:

 out = np.empty_like(lil_img, dtype=object) 

En mi caso, el problema fue con un diagtwig de dispersión de un dataframe X []:

 ax.scatter(X[:,0],X[:,1],c=colors, cmap=CMAP, edgecolor='k', s=40) #c=y[:,0], #ValueError: setting an array element with a sequence. #Fix with .toarray(): colors = 'br' y = label_binarize(y, classes=['Irrelevant','Relevant']) ax.scatter(X[:,0].toarray(),X[:,1].toarray(),c=colors, cmap=CMAP, edgecolor='k', s=40)