当我执行这个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
数组(具有float
dtype(的一个元素时:
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])]