修改2D numpy数组中的行后的所有元素

szqfcxe2  于 9个月前  发布在  其他
关注(0)|答案(1)|浏览(74)

如果我有一个2d numpy(整数,d也是整数)数组,如

[[0 1 2 d]
 [3 4 d 5]
 [6 d 7 8]]

字符串
我怎么能0所有元素(按行)后d(和包括)每行?
我已经使用了for循环,但我想知道是否有一个通过numpy的向量化方法。我刚刚看到,也许你可以减去一个三角矩阵:

[[0 0 0 d]
 [0 0 d 5]
 [0 d 7 8]]


但这并不能解决我的问题,因为它需要将d之前的值归零。
编辑:
repr(array)

array([[0, 1, 2, d],
   [3, 4, d, 5],
   [6, d, 7, 8]], dtype=int64)

tzdcorbm

tzdcorbm1#

IIUC,你可以用cumsum制作一个掩码,并用它来屏蔽where的前导值:

d = 9
a = np.array([[0, 1, 2, d],
              [3, 4, d, 5],
              [6, d, 7, 8]])

out = np.where(np.cumsum(a == d, axis=1), a, 0)

字符串
带有cumprod的变体和就地修改:

a[np.cumprod(a!=d, axis=1).astype(bool)] = 0


输出量:

array([[0, 0, 0, 9],
       [0, 0, 9, 5],
       [0, 9, 7, 8]])


中间掩码(对于第一种方法,非零值被认为是True):

# np.cumsum(a == d, axis=1)
array([[0, 0, 0, 1],
       [0, 0, 1, 1],
       [0, 1, 1, 1]])

# np.cumprod(a!=d, axis=1).astype(bool)
array([[ True,  True,  True, False],
       [ True,  True, False, False],
       [ True, False, False, False]])

相关问题