290 votes

(ValueError): une erreur s'est produite en définissant un élément de tableau avec une séquence

Pourquoi les échantillons de code suivants donnent-ils tous l'erreur suivante?

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

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

tous donnent l'erreur suivante?

ValueError: setting an array element with a sequence.

350voto

Sven Marnach Points 133943

Raison possible 1: tentative de créer un tableau jagged

Vous pouvez être en train de créer un tableau à partir d'une liste qui n'est pas structurée comme un tableau multi-dimensionnel:

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

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

Dans ces exemples, l'argument de numpy.array contient des séquences de longueurs différentes. Cela produira un message d'erreur car la liste d'entrée n'est pas structurée comme une "boîte" pouvant être transformée en un tableau multidimensionnel.

Raison possible 2: fournir des éléments de types incompatibles

Par exemple, fournir une chaîne de caractères comme élément dans un tableau de type float:

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

Si vous souhaitez vraiment avoir un tableau NumPy contenant à la fois des chaînes de caractères et des nombres flottants, vous pourriez utiliser le dtype object, qui permet au tableau de contenir des objets Python arbitraires:

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

85voto

Eric Leschinski Points 14289

La ValueError de Python:

ValueError: setting an array element with a sequence.

Signifie exactement ce qu'elle dit, vous essayez de mettre une séquence de chiffres dans une seule case de chiffre. Elle peut être déclenchée dans diverses circonstances.

1. Lorsque vous passez un tuple ou une liste python pour être interprété comme un élément de tableau numpy:

import numpy

numpy.array([1,2,3])               #bien

numpy.array([1, (2,3)])            #Échec, ne peut pas convertir un tuple en un élément de tableau numpy

numpy.mean([5,(6+7)])              #bien

numpy.mean([5,tuple(range(2))])    #Échec, ne peut pas convertir un tuple en un élément de tableau numpy

def foo():
    return 3
numpy.array([2, foo()])            #bien

def foo():
    return [3,4]
numpy.array([2, foo()])            #Échec, ne peut pas convertir une liste en un élément de tableau numpy

2. En essayant de mettre une longueur de tableau numpy > 1 dans un élément de tableau numpy:

x = np.array([1,2,3])
x[0] = np.array([4])         #bien

x = np.array([1,2,3])
x[0] = np.array([4,5])       #Échec, ne peut pas convertir le tableau numpy pour le faire entrer dans un élément de tableau numpy

Un tableau numpy est en train d'être créé, et numpy ne sait pas comment mettre des tuples ou des tableaux multi-évalués dans des emplacements d'éléments uniques. Il s'attend à ce que tout ce que vous lui fournissez s'évalue à un chiffre unique, et si ce n'est pas le cas, Numpy répond qu'il ne sait pas comment définir un élément de tableau avec une séquence.

25voto

Ayodhyankit Paul Points 4505

Dans mon cas, j'ai eu cette erreur dans Tensorflow, la raison était que j'essayais de fournir 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 je vais obtenir une erreur :

ValueError: setting an array element with a sequence.

mais si je fais du padding alors :

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

Maintenant ça marche.

12voto

Adam Liu Points 554

Pour ceux qui ont des problèmes similaires avec 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)

6voto

Dans mon cas, le problème était autre. J'essayais de convertir des listes de listes d'entiers 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.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X