我想要一个新数组,其值只能使用布尔掩码被 3 或 5 整除

I want a new array with values divisible by 3 or 5 only using boolean mask

下面的代码给出了一个错误,我不知道如何获得所需的输出。

import numpy as np
arr=np.arange(25).reshape(5,5)
mask=(arr%3==0 or arr%5==0)
print(arr[mask])

Output- ValueError: 多元素数组的真值不明确。在第 4

行使用 a.any() 或 a.all()

使用 numpy 内置函数 or:

mask=np.logical_or(arr%3==0,arr%5==0)
arr[mask]
#[ 0  3  5  6  9 10 12 15 18 20 21 24]

arr%3==0 or arr%5==0
ORing 两个布尔变量将给出一个布尔答案,因此它不能用作索引。要获取所有值,这里有一个简单易读的代码:

ans = []
for array in arr:
    for i in array:
        if i%3==0 or i%5==0:
            ans.append(i)
print(ans)

您的代码中有两处需要更改:

  1. 您需要将 and/or 替换为 &/|
  2. 您必须为条件添加大括号,以确保计算中没有歧义。

下面是更新后的代码:

import numpy as np
arr=np.arange(25).reshape(5,5)
print(arr[(arr%3==0) | (arr%5==0)])
# Output: [ 0  3  5  6  9 10 12 15 18 20 21 24]