NumPy将负值更改为零,并将列中高于它的所有值更改为零



如何将列中的所有值从负数重置到数组中的顶部到零?

data = np.array([[1, 1, 1, 2], [0, 1, 0, -1], [-1, 0, 1, 0], [1, 1, 1, 1]])
resetneg_data = np.where(data<0, 0, data)
print(resetnet_data)

这给了我:

[[1 1 1 2]
[0 1 0 0]
[0 0 1 0]
[1 1 1 1]]

但是我想要的是:

[[0 1 1 0]
[0 1 0 0]
[0 0 1 0]
[1 1 1 1]]

也就是说,负的地方为零,负以上的地方都为零。但不是0高于其他0。因此,如果一行中某一列降至0以下,它上面的所有行都重置为0。

我可以通过找到特定的范围来掩盖这些值吗?

mask_end = np.where(data < 0)
print(mask_end)

给:

(array([1, 2]), array([3, 0]))

也许……使用这些值替换到那一行的列与零?

# find values that are smaller than 0 from bottom up along with values above negatives
mask = np.minimum.accumulate(data[::-1])[::-1] < 0
# set value at mask positions as 0
data[mask] = 0
data
#[[0 1 1 0]
# [0 1 0 0]
# [0 0 1 0]
# [1 1 1 1]]

相关内容

最新更新