python简单示例-ValueError:用序列设置数组元素



当我执行这个python代码时,我得到了一条错误消息:ValueError:用序列设置数组元素。

怎么了?你能帮我吗?

a=np.array([1,3,5,7,9], dtype=int)
c=np.array([3,4,7,8,9], dtype=int)
b=np.zeros(len(a))
for i in range(len(a)):
b[i]= np.where(a == int(c[i]))

问题在于b[i]= np.where(a == int(c[i])),它返回的数组在您的示例中只包含一个元素。然而,v也是一维的,你必须指定标量而不是数组。如果您确定搜索只返回1个元素,则可以执行b[i]= np.where(a == int(c[i]))[0]

您可以尝试将其附加到b,而不是替换值?

B.append(np.where( a == c[i]))

还可以尝试使用for循环内的if条件:(

问题出在您的数组b上。由于它是一个数组,所以不如列表灵活。由于np.where语句有时会返回一个空数组,甚至可能返回一个包含更多标量的数组,所以这有点问题。您最好将b定义为一个列表:

a=np.array([1,3,5,7,9], dtype=int)
c=np.array([3,4,7,8,9], dtype=int)
b=[]
for i in range(len(a)):
b.append(np.where(a==c[i])[0])
print(b)
[array([1]),
array([], dtype=int64),
array([3]),
array([], dtype=int64),
array([4])]

只有当您完全确定np.where语句将返回一个且只有一个标量时,您才能使用@Simon Hawe的解决方案。

请注意,这将返回a的索引,其中语句为True!如果你想要值本身,代码就会变成

a=np.array([1,3,5,7,9], dtype=int)
c=np.array([3,4,7,8,9], dtype=int)
b=[]
for i in range(len(a)):
b.append(a[np.where(a==c[i])])
print(b)
[array([3]),
array([], dtype=int64),
array([7]),
array([], dtype=int64),
array([9])]

我应该投票关闭它,因为您没有提供足够的调试信息,尤其是没有提供完整的回溯

但让我们看看你在做什么。关于第一次迭代:

In [342]: a==c[0]
Out[342]: array([False,  True, False, False, False])
In [343]: np.where(a==c[0])
Out[343]: (array([1]),)

注意where产生了什么。它是一个元组,而不是一个数字(尽管它只在True上找到(。如果不清楚,请阅读文档。

当我们尝试将该值分配给b数组(具有floatdtype(的一个元素时:

In [344]: b[0] = np.where(a==c[0])
TypeError: float() argument must be a string or a number, not 'tuple'
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "<ipython-input-344-b205dc5b1048>", line 1, in <module>
b[0] = np.where(a==c[0])
ValueError: setting an array element with a sequence.

你收到完整的信息了吗?如果是,你为什么只引用最后一行?

虽然可以从where元组中提取[1],但对于其他迭代,结果可能是空的——不匹配!

In [346]: np.where(a==c[1])
Out[346]: (array([], dtype=int64),)
In [347]: np.where(a==c[2])
Out[347]: (array([3]),)
In [348]: np.where(a==c[3])
Out[348]: (array([], dtype=int64),)

可以将这些where的结果收集在一个列表中,但为什么?

In [349]: [np.nonzero(a==c[i])[0] for i in range(5)]
Out[349]: 
[array([1]),
array([], dtype=int64),
array([3]),
array([], dtype=int64),
array([4])]

最新更新