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

ma8fv8wu  于 2023-06-23  发布在  Python
关注(0)|答案(4)|浏览(128)

当我执行这个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]))
wsxa1bj1

wsxa1bj11#

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

camsedfj

camsedfj2#

你可以尝试将它附加到b,而不是替换它的值。

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

也可以尝试在for循环中使用if条件:)

4urapxun

4urapxun3#

问题出在您的阵列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])]
h43kikqp

h43kikqp4#

我应该投票关闭它,因为你没有提供足够的调试信息,特别是没有完整的traceback
但让我们看看你在做什么。在第一次迭代中:

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

相关问题