首页 > 解决方案 > 如何根据条件在numpy数组中插入行

问题描述

我有两个 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]])]

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

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

有没有办法在我想要的地方插入这些行?在此之前,我非常感谢任何帮助。

标签: pythonarrayslistnumpyinsert

解决方案


试试这个-

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]])]

推荐阅读