为什么要做下面的代码示例:
np.array([[1, 2], [2, 3, 4]])
np.array([1.2, "abc"], dtype=float)
...都给出以下错误?
ValueError:使用序列设置数组元素。
为什么要做下面的代码示例:
np.array([[1, 2], [2, 3, 4]])
np.array([1.2, "abc"], dtype=float)
...都给出以下错误?
ValueError:使用序列设置数组元素。
当前回答
对于那些在Numpy中遇到类似问题的人来说,一个非常简单的解决方案是:
定义数组时定义dtype=object为数组赋值。例如:
out = np.empty_like(lil_img, dtype=object)
其他回答
当形状不是规则的或者元素有不同的数据类型时,dtype参数传递给np。数组只能是object。
import numpy as np
# arr1 = np.array([[10, 20.], [30], [40]], dtype=np.float32) # error
arr2 = np.array([[10, 20.], [30], [40]]) # OK, and the dtype is object
arr3 = np.array([[10, 20.], 'hello']) # OK, and the dtype is also object
``
在我的例子中,我在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]]
现在起作用了。
在我的例子中,我有一个嵌套的列表作为我想要用作输入的系列。
第一次检查:如果
df['nestedList'][0]
输出一个列表如[1,2,3],你有一个嵌套的列表。
然后检查当您更改输入df['nestedList'][0]时是否仍然得到错误。
然后,下一步可能是将所有嵌套列表连接到一个非嵌套列表,使用
[item for sublist in df['nestedList'] for item in sublist]
这种对嵌套列表的扁平化是从如何从列表的列表中制作一个扁平化列表中借来的。
对我来说,问题是另一个。我试图将int类型的列表转换为数组。问题是有一个列表与其他列表的长度不同。如果你想证明它,你必须做到:
print([i for i,x in enumerate(list) if len(x) != 560])
在我的例子中,长度参考是560。
对于那些在Numpy中遇到类似问题的人来说,一个非常简单的解决方案是:
定义数组时定义dtype=object为数组赋值。例如:
out = np.empty_like(lil_img, dtype=object)