web-dev-qa-db-fra.com

ValueError: paramétrer un élément de tableau avec une séquence

This Python code:

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()

Lance ce message d'erreur:

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.

Est-ce que n'importe qui peut me montrer quoi faire pour résoudre le problème dans le code cassé ci-dessus afin qu'il cesse de lancer un message d'erreur?


EDIT: J'ai fait une commande d'impression pour obtenir le contenu de la matrice, et voici ce qu'elle a imprimé:

UnFilteredDuringExSummaryOfMeansArray est:

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

Cela ressemble à une matrice de 5 lignes par 13 colonnes, bien que le nombre de lignes soit variable lorsque différentes données sont exécutées via le script. Avec ces mêmes données que j'ajoute à cela.

EDIT 2 : Cependant, le script génère une erreur. Donc, je ne pense pas que votre idée explique le problème qui se pose ici. Merci quand même. D'autres idées?


EDIT 3:

Pour votre information, si je remplace cette ligne de code problématique:

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

avec ceci à la place:

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

Ensuite, cette section du script fonctionne correctement sans générer d'erreur, mais ensuite cette ligne de code plus loin dans la suite:

p.ylim(.5*RRDuringArray.min(),1.5*RRDuringArray.max())

Lance cette erreur:

File "mypath\mypythonscript.py", line 3631, in CreateSummaryGraphics
  p.ylim(.5*RRDuringArray.min(),1.5*RRDuringArray.max())
TypeError: cannot perform reduce with flexible type

Vous pouvez donc voir que je dois spécifier le type de données pour pouvoir utiliser ylim dans matplotlib, mais spécifier le type de données renvoie le message d'erreur qui a initié cette publication.

153
MedicalMath

D'après le code que vous nous avez montré, la seule chose que nous puissions dire, c'est que vous essayez de créer un tableau à partir d'une liste qui n'a pas la forme d'un tableau multidimensionnel. Par exemple

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

ou

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

générera ce message d'erreur, car la forme de la liste d'entrée n'est pas une "boîte" (généralisée) pouvant être transformée en un tableau multidimensionnel. Donc probablement UnFilteredDuringExSummaryOfMeansArray contient des séquences de différentes longueurs.

Edit: Une autre cause possible de ce message d'erreur consiste à utiliser une chaîne en tant qu'élément d'un tableau de type float:

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

C'est ce que vous essayez en fonction de votre modification. Si vous voulez vraiment avoir un tableau NumPy contenant à la fois des chaînes et des éléments flottants, vous pouvez utiliser le type 2 object, qui permet au tableau de contenir des objets Python arbitraires:

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

Sans savoir ce que votre code doit accomplir, je ne peux pas juger si c'est ce que vous voulez.

206
Sven Marnach

Le Python ValueError:

ValueError: setting an array element with a sequence.

Cela veut dire exactement ce que ça dit, vous essayez de mettre une séquence de chiffres dans un seul numéro. Il peut être jeté dans diverses circonstances.

1. Lorsque vous passez un python tuple ou une liste à interpréter en tant qu'élément de tableau 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. En essayant de décomposer une longueur de tableau numpy> 1 dans un élément de tableau 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

Un tableau numpy est en cours de création et numpy ne sait pas comment empiler des n-uplets ou des tableaux à valeurs multiples dans des emplacements à élément unique. Numpy répond qu'il ne sait pas comment définir un élément de tableau avec une séquence.

35
Eric Leschinski

Dans mon cas, j'ai eu cette erreur dans Tensorflow, Reason essayait d'alimenter un tableau avec une longueur ou des séquences différentes:

exemple :

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)

Et si mon tableau est:

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

Alors j'aurai une erreur:

ValueError: setting an array element with a sequence.

mais si je fais du rembourrage alors:

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

Maintenant ça marche.

11
Aaditya Ura

Dans mon cas, le problème en était un autre. J'essayais de convertir des listes de listes de int en tableau. Le problème était qu’il y avait une liste avec une longueur différente des autres. Si vous voulez le prouver, vous devez faire:

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

Dans mon cas, la référence de longueur était 560.

4

pour ceux qui rencontrent des problèmes similaires dans Numpy, une solution très simple serait:

définir dtype=object lors de la définition d'un tableau pour lui attribuer des valeurs. par exemple:

out = np.empty_like(lil_img, dtype=object)
4
Adam Liu

Dans mon cas, le problème était avec un diagramme de dispersion d'une base de données 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)
2
Max Kleiner