2011-01-12 10 views
73
código

Este Python:ValueError: Configuración de un elemento de matriz con una secuencia

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


EDIT: hice un comando de impresión para obtener el contenido de la matriz, y esto es lo que se imprime:

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]] 

Parece que una Matriz de columna de 5 filas por 13, aunque el número de filas es variable cuando se ejecutan datos diferentes a través del script. Con esta misma información que estoy agregando en esto.

EDIT 2: Sin embargo, el guión es tirar un error. Entonces, no creo que su idea explique el problema que está sucediendo aquí. Gracias de cualquier forma. ¿Alguna otra idea?


Datos 3:

FYI, si reemplazo esta línea problema de código:

RRDuringArray = p.array(UnFilteredDuringExSummaryOfMeansArray,dtype=p.float64)[1:,3] 

con este lugar:

RRDuringArray = p.array(UnFilteredDuringExSummaryOfMeansArray)[1:,3] 

Entonces esa sección de la la secuencia de comandos funciona bien sin arrojar un error, pero luego esta línea de código abajo de 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 

para que pueda ver lo que necesito para especificar el tipo de datos con el fin de poder utilizar ylim en matplotlib, pero aún especificando los datos tipo está arrojando el mensaje de error que inició esta publicación.

Respuesta

122

Desde el 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 forma de 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 (generalizado) "caja" 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 está tratando de utilizar una cadena como un elemento en una matriz de tipo float:

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

Eso es lo que está tratando de acuerdo a su edición. Si realmente quiere tener una matriz NumPy que contiene ambas cadenas y los flotadores, se podría utilizar el dtype object, lo que permite a la matriz para contener objetos de Python arbitrarias:

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

Sin saber lo que su código será lograr, lo que pueda' juzga si esto es lo que quieres.

+0

Gracias, pero no creo que esa sea la respuesta. He agregado el contenido de la matriz cuando arroja el error anterior. Y me parece que es un cuadro cuando lo pego en el bloc de notas y lo examino línea por línea. ¿Alguna otra idea? – MedicalMath

+1

Su edición parece haber resuelto mi problema. Necesitaba establecer el dtype = objeto. Muchas gracias. – MedicalMath

+0

Esta pregunta ha sido completamente respondida. – MedicalMath

6

El pitón ValueError:

ValueError: setting an array element with a sequence. 

significa exactamente lo que dice, que está tratando de meter una secuencia de números en una sola ranura número. Se puede lanzar bajo diversas circunstancias.

1. Cuando se pasa una tupla Python o lista para ser interpretada como un elemento de la 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 numpy gama> 1 en un elemento de la matriz numpy : se está creando

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 

Una matriz numpy y numpy no sabe cómo meter tuplas de varios valores o matrices en las ranuras de los elementos individuales. Espera que lo que sea que le des evalúe a un solo número, si no lo hace, Numpy responde que no sabe cómo configurar un elemento de matriz con una secuencia.

Cuestiones relacionadas