在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]])
我还没有充分发挥 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]])