在numpy中过滤数组特定值的方法

Ways to filter specific value of array in numpy

我还没有充分发挥 numpy 的潜力。我有这个非常大的 3d 阵列 (700000 x 32 x 32)。所有的值都在 1 到 4 之间。我希望能够过滤数组,以便我得到一个相同形状的数组,但对于 4 的值只有 1,对于其他所有值只有 0。

例如,

[[4, 2, 2, 3],      [[1, 0, 0, 0],
 [1, 4, 4, 2],       [0, 1, 1, 0],
 [2, 4, 1, 3],   ->  [0, 1, 0, 0],
 [2, 3, 2, 4]]       [0, 0, 0, 1]]

适用于 np.where(array==4)。我得到了一个巨大的 3d 数组,我可以重塑它,但是会有更多的 numpy 方法吗?谢谢

arr = np.array([[4, 2, 2, 3],      
                [1, 4, 4, 2],       
                [2, 4, 1, 3],  
                [2, 3, 2, 4]])

In[58]: (arr==4).astype(int)

Out[58]: array([[1, 0, 0, 0],
                [0, 1, 1, 0],
                [0, 1, 0, 0],
                [0, 0, 0, 1]])
import numpy as np
matrix = np.zeros((5,5))
matrix[0]=[1,-2,3,4,-5]
matrix[2]=[0,1,4,0,4]
matrix=np.array([[1 if value==4 else 0 for value in row ] for row in matrix])

上面的代码片段使用嵌套列表推导,然后将列表转换回 np 数组

你也可以用 np.where 得到它,而不必用下一个表达式重塑它:

arr = np.array([[4, 2, 2, 3],      
                [1, 4, 4, 2],       
                [2, 4, 1, 3],  
                [2, 3, 2, 4]])

np.where(arr == 4, 1, 0)

输出:

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