我正在寻找向量化的方式来更改列中第一个非零元素上方的数组值。
for x in range(array.shape[1]):
for y in range(array.shape[0]):
if array[y,x]>0:
break
else:
array[y,x]=255
答案 0 :(得分:2)
当您撰写有关 array (不是 DataFrame )的文章时,我假设您有 一个 Numpy 数组,并希望使用 Numpy 方法。
要执行任务,请运行以下代码:
np.where(np.cumsum(np.not_equal(array, 0), axis=0), array, 255)
示例和步骤说明:
源数组:
array([[0, 1, 0],
[0, 0, 1],
[1, 1, 0],
[1, 0, 0]])
np.not_equal(array, 0)
使用 True 计算一个布尔数组
元素!= 0:
array([[False, True, False],
[False, False, True],
[ True, True, False],
[ True, False, False]])
np.cumsum(..., axis=0)
计算累计和( True 计为 1 )
沿轴 0 (在列中):
array([[0, 1, 0],
[0, 1, 1],
[1, 2, 1],
[2, 2, 1]], dtype=int32)
4。上面的数组是 where 中使用的掩码。对于屏蔽值(其中 掩码的对应元素是 True (实际上是!= 0 )), 从 array 的对应元素中获取值,否则获取 255 :
np.where(..., array, 255)
(对于我的数组)结果是:
array([[255, 1, 255],
[255, 0, 1],
[ 1, 1, 0],
[ 1, 0, 0]])
答案 1 :(得分:0)
使用遮罩:
array[array == 0] = 255