假设有一个如下的numpy二维数组:
>>> x = np.array([[4,2,3,1,1], [1,0,3,2,1], [1,4,4,3,4]])>>> xarray([[4, 2, 3, 1, 1], [1, 0, 3, 2, 1], [1, 4, 4, 3, 4]])
我的目标是 – 在每一行中找到值4的首次出现,并将该行中的该元素(包括该元素本身)及之后的所有元素设置为0。因此,经过此操作后,转换后的数组应如下所示:
>>> x_newarray([[0, 0, 0, 0, 0], [1, 0, 3, 2, 1], [1, 0, 0, 0, 0]])
实现这一目标的pythonic且优化的方法是什么?我尝试使用np.argmax()
和np.take()
的组合,但未能达到最终目标。
回答:
你可以使用列方向上的累积和(即axis=1
)和布尔索引来实现:
n = 4idx = np.cumsum(x == n, axis=1) > 0x[idx] = 0
或者,可能更好的方法是进行累积的逻辑或操作:
idx = np.logical_or.accumulate(x == n, axis=1)