为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

小唯快跑啊 2023-06-27 13:23:47
假设我有一个包含大量行的二维数组,以及该数组的索引对列表。我想创建一个新的 2 维数组,其行是原始数组的行的串联,根据索引对列表制作。例如:a = 1 2 34 5 67 8 90 0 0indexes = [[0,0], [0,1], [2,3]]返回的数组应该是:1 2 3 1 2 31 2 3 4 5 67 8 9 0 0 0显然我可以迭代索引列表,但我的问题是是否有更有效的方法来做到这一点。我应该说索引列表也非常大。
查看完整描述

3 回答

?
POPMUISE

TA贡献1765条经验 获得超5个赞

首先将索引转换为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)


查看完整回答
反对 回复 2023-06-27
?
qq_笑_17

TA贡献1818条经验 获得超7个赞

您可以使用水平堆叠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]]


查看完整回答
反对 回复 2023-06-27
?
冉冉说

TA贡献1877条经验 获得超1个赞

您可以使用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]]

'''


查看完整回答
反对 回复 2023-06-27
  • 3 回答
  • 0 关注
  • 101 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信