Одной из возможностей является использование масочных массивов :
import numpy as np
arr = np.array([[1., 1., 2.], [2., 3., 4.], [4., 5., 6]])
ngoodcols = np.array([0, 1, 2])
mask = ngoodcols[:, np.newaxis] <= np.arange(arr.shape[1])
arr_masked = np.ma.masked_array(arr, mask)
print(arr_masked)
# [[-- -- --]
# [2.0 -- --]
# [4.0 5.0 --]]
print(arr_masked.sum(1))
# [-- 2.0 9.0]
Обратите внимание, что здесь, когда нет хороших значений, в результате вы получаете «пропущенное» значение, которое может или не может быть полезным для вас. Кроме того, замаскированный массив также позволяет вам легко выполнять другие операции, которые применяются только к допустимым значениям (среднее и т. Д.).
Другой простой вариант - просто умножить на маску:
import numpy as np
arr = np.array([[1., 1., 2.], [2., 3., 4.], [4., 5., 6]])
ngoodcols = np.array([0, 1, 2])
mask = ngoodcols[:, np.newaxis] <= np.arange(arr.shape[1])
print((arr * ~mask).sum(1))
# [0. 2. 9.]
Здесь, когда нет хороших значений, вы просто получаете ноль.