修改二维 numpy 数组中分隔符之后的行上的所有元素

问题描述 投票:0回答:1

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

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

如何将每行上 d(包括)之后的所有元素(按行)归零?

我为此使用了 for 循环,但我想知道是否有通过 numpy 的矢量化方法。我刚刚看到也许你可以减去一个三角矩阵:

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

但这并不能解决我的问题,因为它需要将 d 之前的值清零。

编辑:

repr(数组)

array([[0, 1, 2, d],
   [3, 4, d, 5],
   [6, d, 7, 8]], dtype=int64)
python numpy vectorization
1个回答
1
投票

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)

输出:

array([[0, 0, 0, 9],
       [0, 0, 9, 5],
       [0, 9, 7, 8]])
© www.soinside.com 2019 - 2024. All rights reserved.