Python 按索引的二维数组更改二维数组

Python 按索引的二维数组更改二维数组,python,arrays,numpy,concatenation,indices,Python,Arrays,Numpy,Concatenation,Indices,我有一个输入数组: np.random.seed(45) a = np.random.randint(100,size=(5,21)) print (a) [[75 30 3 32 95 61 85 35 68 15 65 14 53 57 72 87 46 8 53 12 34] [24 12 17 68 30 56 14 36 31 86 36 57 61 79 17 6 42 11 8 49 77] [75 63 42 54 16 24 95 63 98 22 27 32 16

我有一个输入数组:

np.random.seed(45)
a = np.random.randint(100,size=(5,21))
print (a)
[[75 30  3 32 95 61 85 35 68 15 65 14 53 57 72 87 46  8 53 12 34]
 [24 12 17 68 30 56 14 36 31 86 36 57 61 79 17  6 42 11  8 49 77]
 [75 63 42 54 16 24 95 63 98 22 27 32 16 75 58 60 54 96 70 32 16]
 [59 92 55 88  5 81 93 79 67 55 60 57 83 27 78 18 87 55 20  9  9]
 [73 27 57 50  7 57 78 68 23 75 41 39 70  2 71 70 27 47 54 93 19]]
索引数组:

b = np.array(
[[0, 1, 2, 3, 4, 5, 6, 7, 8, 9], 
 [9, 8, 7, 6, 5, 4, 3, 2, 1, 0], 
 [20, 19, 18, 17, 16, 15, 14, 13, 12, 11]]
)

print (b)
[[ 0  1  2  3  4  5  6  7  8  9]
 [ 9  8  7  6  5  4  3  2  1  0]
 [20 19 18 17 16 15 14 13 12 11]]
预期产出:

c = np.array(
[[75, 30, 3, 32, 95, 61, 85, 35, 68, 15], 
 [24, 12, 17, 68, 30, 56, 14, 36, 31, 86], 
 [75, 63, 42, 54, 16, 24, 95, 63, 98, 22],
 [59, 92, 55, 88, 5, 81, 93, 79, 67, 55],
 [73, 27, 57, 50, 7, 57, 78, 68, 23, 75], 
 [15, 68, 35, 85, 61, 95, 32, 3, 30, 75], 
 [86, 31, 36, 14, 56, 30, 68, 17, 12, 24],
 [22, 98, 63, 95, 24, 16, 54, 42, 63, 75], 
 [55, 67, 79, 93, 81, 5, 88, 55, 92, 59], 
 [75, 23, 68, 78, 57, 7, 50, 57, 27, 73],
 [34, 12, 53, 8, 46, 87, 72, 57, 53, 14],
 [77, 49, 8, 11, 42, 6, 17, 79, 61, 57], 
 [16, 32, 70, 96, 54, 60, 58, 75, 16, 32],
 [9, 9, 20, 55, 87, 18, 78, 27, 83, 57], 
 [19, 93, 54, 47, 27, 70, 71, 2, 70, 39]]
)

说明

对于索引数组的每一行,需要更改输入数组的列,最后将所有数组连接在一起

我相信有一些很好的矢量化解决方案


我尝试的是:


我检查了,但没有帮助。

索引到列中,排列轴并重塑形状-

c = a[:, b].swapaxes(0,1).reshape(-1,b.shape[1])

索引到列、排列轴和重塑形状-

c = a[:, b].swapaxes(0,1).reshape(-1,b.shape[1])

因此,似乎置换轴+整形是大多数(如果不是所有nd变换的话)的诀窍:)@kmario23是的,这有点疯狂,因为我从未意识到在那篇直觉文章之前,我使用了这些整形+置换+整形的组合。现在,我已经意识到了这一点:)很高兴在这里链接/引用这篇文章,这样人们就可以理解这些改变和重塑背后的想法。这也很好,因为这里似乎没有解释;)因此,似乎置换轴+整形是大多数(如果不是所有nd变换的话)的诀窍:)@kmario23是的,这有点疯狂,因为我从未意识到在那篇直觉文章之前,我使用了这些整形+置换+整形的组合。现在,我已经意识到了这一点:)很高兴在这里链接/引用这篇文章,这样人们就可以理解这些改变和重塑背后的想法。这也很好,因为这里似乎没有解释;)