如何将多个 numpy 数组插入不同索引处的另一个 numpy 数组

问题描述 投票:0回答:3

假设我们有 4 个 numpy 数组 A B、C 和 D

A = ([11,22,33,44,55,66,77])
B = ([1,2,3,4,5])
C = ([6,7,8,9])
D = ([10,11])

我想将数组 B、C 和 D 插入数组 A。我得到了数组 A 的索引列表,用于插入数组 B、C 和 D

idx = [1,3,5]

即数组 B 应插入到 A[1] 之后,数组 C 插入到 A[3] 之后,数组 D 插入到 A[5] 之后

预期的输出是这样的:

Out = ([11,22,1,2,3,4,5,33,44,6,7,8,9,55,66,10,11,77])

我试过使用

np.insert
但它没有产生所需的输出。

提前致谢!

python numpy numpy-ndarray
3个回答
0
投票
import numpy as np

A = np.array([11,22,33,44,55,66,77])
B = np.array([1,2,3,4,5])
C = np.array([6,7,8,9])
D = np.array([10,11])
idx = [1,3,5]

# initialize the output array with A
Out = A.copy()

# loop through the indices in reverse order and concatenate the arrays
for i in reversed(idx):
    if i == idx[-1]:
        Out = np.concatenate((Out[:i+1], D, Out[i+1:]))
    elif i == idx[-2]:
        Out = np.concatenate((Out[:i+1], C, Out[i+1:]))
    else:
        Out = np.concatenate((Out[:i+1], B, Out[i+1:]))

print(Out)

0
投票

可以使用列表切片;你可以将你的 numpy 数组转换为列表

A = list([11,22,33,44,55,66,77])
B = list([1,2,3,4,5])
C = list([6,7,8,9])
D = list([10,11])

A[:2] + B + A[2:4] + C + A[4:6] + D + A[6:]
idx = [1,3,5]

#output
[11, 22, 1, 2, 3, 4, 5, 33, 44, 6, 7, 8, 9, 55, 66, 10, 11, 77]

一般来说,

idx = [1,3,5]
A[:idx[0]+1] + B + A[idx[0]+1:idx[1]+1] + C + A[idx[1]+1:idx[2]+1] + D + A[idx[2]+1:]

0
投票

One

np.insert
不起作用,因为数组的大小不同。那么它应该与多个插入一起使用。但由于您是从列表开始的,列表插入会更简单、更快。

In [150]: A = ([11,22,33,44,55,66,77])
     ...: B = ([1,2,3,4,5])
     ...: C = ([6,7,8,9])
     ...: D = ([10,11])

从头开始;这样大小的增加就不会弄乱索引:

In [160]: A[6:6]=D
In [161]: A
Out[161]: [11, 22, 33, 44, 55, 66, 10, 11, 77]

In [162]: A[4:4]=C
In [163]: A[2:2]=B

In [164]: A
Out[164]: [11, 22, 1, 2, 3, 4, 5, 33, 44, 6, 7, 8, 9, 55, 66, 10, 11, 77]

这是一种使用一个插入物的方法:

In [173]: A = np.array([11,22,33,44,55,66,77])

In [174]: idx = np.array([1,3,5]).repeat((len(B),len(C),len(D)))+1    
In [175]: idx
Out[175]: array([2, 2, 2, 2, 2, 4, 4, 4, 4, 6, 6])

In [176]: np.insert(A,idx, np.hstack((B,C,D)))
Out[176]: 
array([11, 22,  1,  2,  3,  4,  5, 33, 44,  6,  7,  8,  9, 55, 66, 10, 11,
       77])

插入

idx
需要匹配
values
数组的大小。

您的

[1,3,5]
是“插入”值。 list 和
insert
都使用“insert before”,因此进行了“+1”调整。

© www.soinside.com 2019 - 2024. All rights reserved.