根据给定的索引对列表连接二维数组的行的有效方法

假设我有一个包含大量行的二维数组,以及该数组的索引对列表。我想创建一个新的 2 维数组,其行是原始数组的行的串联,根据索引对列表制作。例如:


a =

 

1 2 3


4 5 6


7 8 9


0 0 0



indexes = [[0,0], [0,1], [2,3]]

返回的数组应该是:


1 2 3 1 2 3


1 2 3 4 5 6


7 8 9 0 0 0

显然我可以迭代索引列表,但我的问题是是否有更有效的方法来做到这一点。我应该说索引列表也非常大。


小唯快跑啊
浏览 149回答 3
3回答

POPMUISE

首先将索引转换为Numpy数组:ind = np.array(indexes)然后生成结果为:result = np.concatenate([a[ind[:,0]], a[ind[:,1]]], axis=1)结果是:array([[1, 2, 3, 1, 2, 3],        [1, 2, 3, 4, 5, 6],        [7, 8, 9, 0, 0, 0]])另一个可能的公式(具有相同的结果):result = np.concatenate([ a[ind[:,i]] for i in range(ind.shape[1]) ], axis=1)

qq_笑_17

您可以使用水平堆叠np.hstack:c = np.array(indexes) np.hstack((a[c[:,0]],a[c[:,1]]))输出:[[1 2 3 1 2 3]  [1 2 3 4 5 6]  [7 8 9 0 0 0]]

冉冉说

您可以使用NumPy以下命令在一行中完成此操作:a = np.arange(12).reshape(4, 3)print(a)b = [[0, 0], [1, 1], [2, 3]]b = np.array(b)print(b)c = a[b.reshape(-1)].reshape(-1, a.shape[1]*b.shape[1])print(c)'''[[ 0  1  2] [ 3  4  5] [ 6  7  8] [ 9 10 11]][[0 0] [1 1] [2 3]][[ 0  1  2  0  1  2] [ 3  4  5  3  4  5] [ 6  7  8  9 10 11]]'''
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python