Вопрос-Ответ

ValueError: setting an array element with a sequence

ValueError: установка элемента массива с последовательностью

Почему следующие примеры кода:

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

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

все выдают следующую ошибку?

ValueError: setting an array element with a sequence.
Переведено автоматически
Ответ 1

Возможная причина 1: попытка создать неровный массив

Возможно, вы создаете массив из списка, который не имеет формы многомерного массива:

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

В этих примерах аргумент в numpy.array содержит последовательности разной длины. Они выдадут это сообщение об ошибке, потому что входной список не имеет формы "ящика", который можно превратить в многомерный массив.

Возможная причина 2: предоставление элементов несовместимых типов

Например, предоставление строки в качестве элемента в массиве типа float:

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

Если вы действительно хотите иметь массив NumPy, содержащий как строки, так и числа с плавающей точкой, вы могли бы использовать dtype object , который позволяет массиву содержать произвольные объекты Python:

numpy.array([1.2, "abc"], dtype=object)
Ответ 2

Ошибка Python ValueError:

ValueError: setting an array element with a sequence.

Означает именно то, что сказано, вы пытаетесь втиснуть последовательность чисел в один слот для чисел. Это может быть использовано при различных обстоятельствах.

1. Когда вы передаете кортеж python или список, который будет интерпретироваться как элемент массива 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. Пытаясь втиснуть numpy array length > 1 в элемент numpy array:

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

Создается массив numpy, и numpy не знает, как втиснуть многозначные кортежи или массивы в ячейки для отдельных элементов. Он ожидает, что все, что вы ему даете, будет вычислено до одного числа, если этого не произойдет, Numpy ответит, что он не знает, как установить элемент массива с последовательностью.

Ответ 3

В моем случае я получил эту ошибку в Tensorflow , причина заключалась в том, что я пытался передать массив с разной длиной или последовательностями :

пример :

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)

И если мой массив равен :

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

Тогда я получу ошибку :

ValueError: setting an array element with a sequence.

но если я сделаю заполнение, то :

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

Теперь это работает.

Ответ 4

для тех, у кого возникли проблемы с аналогичными проблемами в Numpy, очень простым решением было бы:

определение dtype=object при определении массива для присвоения ему значений. например:

out = np.empty_like(lil_img, dtype=object)
python arrays numpy