如何在numpy中进行条件行求和?

ero*_*gol 3 python numpy

我有一个numpy 2d数组,包括正条目和-1值,这些是缺少的值.我想在不包含-1值的情况下对此矩阵的行求和.有没有办法在numpy中执行条件行求和?

DSM*_*DSM 5

方法#1:乘以布尔数组,因为True行为为1和False0:

>>> a
array([[ 1,  3,  0,  4,  2],
       [ 2,  1,  4, -1,  1],
       [-1,  2,  4,  4,  4],
       [ 4,  4,  4,  4,  0],
       [ 0,  2,  4,  1,  2]])
>>> (a * (a != -1)).sum(axis=1)
array([10,  8, 14, 16,  9])
Run Code Online (Sandbox Code Playgroud)

方法#2:使用相同的布尔数组(好吧,翻转 - 在我们想知道要保留哪些之前,现在要忽略哪些)作为a的正式掩码MaskedArray.

>>> am = np.ma.MaskedArray(a, mask=(a==-1))
>>> am
masked_array(data =
 [[1 3 0 4 2]
 [2 1 4 -- 1]
 [-- 2 4 4 4]
 [4 4 4 4 0]
 [0 2 4 1 2]],
             mask =
 [[False False False False False]
 [False False False  True False]
 [ True False False False False]
 [False False False False False]
 [False False False False False]],
       fill_value = 999999)

>>> am.sum(axis=1)
masked_array(data = [10 8 14 16 9],
             mask = [False False False False False],
       fill_value = 999999)
Run Code Online (Sandbox Code Playgroud)

[说实话,我几乎从不使用MaskedArray.]