【问题标题】:How to inserts rows in a numpy array based on the condition如何根据条件在numpy数组中插入行
【发布时间】:2020-12-03 15:22:45
【问题描述】:

我有两个 numpy 数组列表,想将一个列表的数组插入另一个列表的数组中:

big_list=[np.array([[1., 1., 2.], [1., 1., 1.9], [1., 1., 5.2]]),
          np.array([[1., 3., 5.1], [0., 0., 1.2], [1., 1., 1.4]])]

small_list= [np.array([[-1., -1., -5.]]),
             np.array([[-1., -1., -1.], [0., -2., -0.5]])]

我想将small_list 的第一个数组插入big_list 的第一个数组,并将small_list 的第二个数组插入big_list 的第二个数组。我想把small_list 放在big_list 的第三列有显着变化的地方。在big_list 的第一个数组中,从第二行到第三行,第三列变化很大(从1.95.2)。对于big_list 的第二个数组,更改发生在第一行之后(从5.11.2)。例如,我想使用像3 这样的阈值来表示一行的第三列与下一行的差异。所以,我想要:

merged= [np.array([[1., 1., 2.], [1., 1., 1.9], [-1., -1., -5.], [1., 1., 5.2]]),
         np.array([[1., 3., 5.1], [-1., -1., -1.], [0., -2., -0.5], [0., 0., 1.2], [1., 1., 1.4]])]

目前,我的代码只能在big_list的末尾追加small_list的行:

merged = [np.append(array, to_append, axis=0) for (array, to_append) in zip(big_list, small_list)]

有没有办法在我想要的地方插入这些行? 在此先感谢您的帮助。

【问题讨论】:

    标签: python arrays list numpy insert


    【解决方案1】:

    试试这个-

    for i, arr in enumerate(big_list):
        diff = list(abs(np.diff(arr[:,-1])) >= 3)
        for t, threshold_state in enumerate(diff):
            if threshold_state:
                big_list[i] = np.insert(big_list[i], t+1, small_list[i], axis=0)
    

    输出

    [array([[ 1. ,  1. ,  2. ],
            [ 1. ,  1. ,  1.9],
            [-1. , -1. , -5. ],
            [ 1. ,  1. ,  5.2]]), 
    array([[ 1. ,  3. ,  5.1],
            [-1. , -1. , -1. ],
            [ 0. , -2. , -0.5],
            [ 0. ,  0. ,  1.2],
            [ 1. ,  1. ,  1.4]])]
    

    【讨论】:

      【解决方案2】:

      试试这个 -

      • 遍历 big_list 中的每个元素
      • idx 计算最后一列值之间的绝对差值>3 的第一个索引
      • 在数组idx处插入对应的小列表。
      merged = []
      for i in range(len(big_list)):
          idx = np.argwhere(np.abs(np.diff(big_list[i][:,2]))>3)[0]+1
          m = np.insert(big_list[i], idx, small_list[i], axis=0)
          merged.append(m)
          
      merged
      
      
      [array([[ 1. ,  1. ,  2. ],
              [ 1. ,  1. ,  1.9],
              [-1. , -1. , -5. ],
              [ 1. ,  1. ,  5.2]]),
       array([[ 1. ,  3. ,  5.1],
              [-1. , -1. , -1. ],
              [ 0. , -2. , -0.5],
              [ 0. ,  0. ,  1.2],
              [ 1. ,  1. ,  1.4]])]
      

      【讨论】:

        猜你喜欢
        • 2018-05-28
        • 1970-01-01
        • 1970-01-01
        • 2021-03-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-08-28
        相关资源
        最近更新 更多