Python 如何根据条件在numpy数组中插入行

Python 如何根据条件在numpy数组中插入行,python,arrays,list,numpy,insert,Python,Arrays,List,Numpy,Insert,我有两个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.

我有两个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\u list
放在
big\u list
的第三列有显著变化的地方。在
big_list
的第一个数组中,从第二行到第三行,第三列变化很大(从
1.9
5.2
)。对于
big_list
的第二个数组,更改发生在第一行之后(从
5.1
1.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]])]
目前,我的代码只能将
小列表
的行追加到
大列表
的末尾:

merged = [np.append(array, to_append, axis=0) for (array, to_append) in zip(big_list, small_list)]
有没有办法在我想要的地方插入这些行? 在此之前,我非常感谢您的帮助。

试试这个-

用于枚举中的i、arr(大列表):
差异=列表(绝对值(np.diff(arr[:,-1]))>=3)
对于t,枚举中的阈值_状态(差异):
如果阈值_状态:
大列表[i]=np.insert(大列表[i],t+1,小列表[i],轴=0)
输出 试试这个-

用于枚举中的i、arr(大列表):
差异=列表(绝对值(np.diff(arr[:,-1]))>=3)
对于t,枚举中的阈值_状态(差异):
如果阈值_状态:
大列表[i]=np.insert(大列表[i],t+1,小列表[i],轴=0)
输出 试试这个-

  • 循环遍历大列表中的每个元素
  • idx计算最后一列值之间的绝对差值大于3的第一个索引
  • 在idx处的数组中插入相应的小列表
试试这个-

  • 循环遍历大列表中的每个元素
  • idx计算最后一列值之间的绝对差值大于3的第一个索引
  • 在idx处的数组中插入相应的小列表
[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]])]
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]])]