更改列中第一个非零元素上方的数组值

时间:2019-11-18 21:00:04

标签: python arrays numpy

我正在寻找向量化的方式来更改列中第一个非零元素上方的数组值。

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

In

Out

2 个答案:

答案 0 :(得分:2)

当您撰写有关 array (不是 DataFrame )的文章时,我假设您有 一个 Numpy 数组,并希望使用 Numpy 方法。

要执行任务,请运行以下代码:

np.where(np.cumsum(np.not_equal(array, 0), axis=0), array, 255)

示例和步骤说明:

  1. 源数组:

    array([[0, 1, 0],
           [0, 0, 1],
           [1, 1, 0],
           [1, 0, 0]])
    
  2. np.not_equal(array, 0)使用 True 计算一个布尔数组 元素!= 0:

    array([[False,  True, False],
           [False, False,  True],
           [ True,  True, False],
           [ True, False, False]])
    
  3. 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