如何通过检查数组中的项目是否在列表中来创建布尔数组?

How to make a boolean array by checking if the items in an array is in a list?

我正在尝试找到一个 numpy 数组 arr 中的每个项目,该数组也在任意列表 lst 中并替换它们,但是 arr > 0 将为易于屏蔽,arr in lst 仅适用于 all() 或 any(),这不是我需要的。

示例输入:数组(1, 2, 3, 4, 5)、列表[2, 4, 6, 8]

输出:数组(1, 0, 3, 0, 5)

我设法用 for 循环得到了相同的结果:

for i in range(len(arr)):
    if arr[i] in lst:
        arr[i] = 0

只是想知道是否有其他方法可以将数组与列表区分开来。

您可以遍历 lst 并仍然使用 numpy 的索引。

for element in lst:
  arr[arr == element] = 0

您可以使用 numpy.isin:

a = np.array((1, 2, 3, 4, 5))
lst = [2, 4, 6, 8]
a[np.isin(a, lst)] = 0

给你 a 的:

array([1, 0, 3, 0, 5])

你也可以用这个。

arr = (1, 2, 3, 4, 5)
lst = [2, 4, 6, 8]

new_arr = tuple('Replace With Anything' if a in lst else a for a in arr)
print(new_arr)