如何将列中的所有值从负数重置到数组中的顶部到零?
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]]