【问题标题】:Numpy array: iterate through column and change value based on the current value and the next valueNumpy数组:遍历列并根据当前值和下一个值更改值
【发布时间】:2022-01-07 18:43:51
【问题描述】:

我有一个这样的数组: 这是我最近在其他地方here 提出的问题的扩展。我有一个像这样的 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], 
     ])

对此的任何帮助将不胜感激!谢谢!

【问题讨论】:

    标签: python numpy iteration


    【解决方案1】:

    一种使用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]])
    

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        猜你喜欢
        • 2022-01-07
        • 2019-07-25
        • 2020-01-19
        • 2017-11-25
        • 2021-02-15
        • 1970-01-01
        • 2021-09-05
        • 2021-10-16
        • 1970-01-01
        相关资源
        最近更新 更多