假设我们有 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
但它没有产生所需的输出。
提前致谢!
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)
可以使用列表切片;你可以将你的 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:]
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”调整。