如何使用布尔数组的 np.infs 将数组的所有索引清零



>我有一个带有 inf 值的矩阵和一个指示要保留哪些值的布尔数组。 如何使用布尔数组将原始矩阵中的所有值(包括 infs)归零,但保留与 True 对应的所有 inf?

前任

X     = [inf, 1, inf]
        [inf, 2,   4]
        [3,   4,   5]
M     = [1,   0,   0]
        [0,   1,   0]
        [0,   1,   0]
(current output)
M * X = [inf, 0, nan]
        [nan, 2,   0]
        [0,   4,   0]
(desired output)
M * X = [inf, 0,   0]
        [0,   2,   0]
        [0,   4,   0]

输入

In [77]: X    
Out[77]: 
array([[inf,  1., inf],
       [inf,  2.,  4.],
       [ 3.,  4.,  5.]])
In [78]: M 
Out[78]: 
array([[1, 0, 0],
       [0, 1, 0],
       [0, 1, 0]])

方法

首先,我们需要反转掩码M,然后使用 numpy.where 获取索引;使用这些索引,我们可以将原始数组中的元素设置为零,方法是按如下方式索引它们:

# inverting the mask
In [59]: M_not = np.logical_not(M)
In [80]: M_not
Out[80]: 
array([[False,  True,  True],
       [ True, False,  True],
       [ True, False,  True]])
# get the indices where `True` exists in array `M_not`
In [81]: indices = np.where(M_not) 
In [82]: indices 
Out[82]: (array([0, 0, 1, 1, 2, 2]), array([1, 2, 0, 2, 0, 2]))
# zero out the elements
In [84]: X[indices] = 0
In [61]: X 
Out[61]: 
array([[inf, 0., 0.],
       [0., 2., 0.],
       [0., 4., 0.]])

附言反转掩码不应理解为矩阵反。它应该理解为翻转布尔值 ( True --> False ; False --> True

相关内容

  • 没有找到相关文章

最新更新