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

乘风 python 180

原文标题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

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

原文链接:https://stackoverflow.com//questions/71996147/how-to-make-a-boolean-array-by-checking-if-the-items-in-an-array-is-in-a-list

回复

我来回复
  • ♦的头像
    评论

    你可以使用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])
    
    2年前 0条评论
  • hnfl的头像
    hnfl 评论

    您可以迭代lst并仍然使用 numpy 的索引。

    for element in lst:
      arr[arr == element] = 0
    
    2年前 0条评论
  • Sharim Iqbal的头像
    Sharim Iqbal 评论

    你也可以使用这个。

    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)
    
    2年前 0条评论