Numpy 数组:遍历列并根据当前值和下一个值更改值

Numpy array: iterate through column and change value based on the current value and the next value

我有一个这样的数组: 这是我最近在别处问的一个问题的扩展 。我有一个像这样的 numpy 数组:

data = np.array([
     [1,2,3],
     [1,2,3],
     [1,2,101],
     [4,5,111],   
     [4,5,6], 
     [4,5,6], 
     [4,5,101], 
     [4,5,112], 
     [4,5,6], 
     ])

在第三列中,如果下一个是 101 并且当前一个是 6,我希望将值替换为 10001。这将导致这样的数组:

data = np.array([
     [1,2,3],
     [1,2,3],
     [1,2,101],
     [4,5,111],   
     [4,5,6], 
     [4,5,10001], 
     [4,5,101], 
     [4,5,112], 
     [4,5,6], 
     ])

如有任何帮助,我们将不胜感激!谢谢!

使用numpy.roll的一种方式:

s = data[:, 2]
data[np.logical_and(s == 6, np.roll(s, -1) == 101), 2] = 10001

输出:

array([[    1,     2,     3],
       [    1,     2,     3],
       [    1,     2,   101],
       [    4,     5,   111],
       [    4,     5,     6],
       [    4,     5, 10001],
       [    4,     5,   101],
       [    4,     5,   112],
       [    4,     5,     6]])

同时我也想出了一个可行的解决方案:

data[
    
    (data[:,2] == 6)
    
    & 
      
      (np.roll(data[:,2]==101,-1,0)),2

] = 10001