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