首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >根据给定的索引对列表连接二维数组的行的有效方法

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

Stack Overflow用户
提问于 2020-08-27 17:24:21
回答 3查看 32关注 0票数 0

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

代码语言:javascript
运行
复制
a =
 
1 2 3

4 5 6

7 8 9

0 0 0


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

返回的数组应为:

代码语言:javascript
运行
复制
1 2 3 1 2 3

1 2 3 4 5 6

7 8 9 0 0 0

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

EN

回答 3

Stack Overflow用户

发布于 2020-08-27 17:38:03

首先将索引转换为Numpy数组:

代码语言:javascript
运行
复制
ind = np.array(indexes)

然后生成如下结果:

代码语言:javascript
运行
复制
result = np.concatenate([a[ind[:,0]], a[ind[:,1]]], axis=1)

结果是:

代码语言:javascript
运行
复制
array([[1, 2, 3, 1, 2, 3],
       [1, 2, 3, 4, 5, 6],
       [7, 8, 9, 0, 0, 0]])

另一个可能的公式(具有相同的结果):

代码语言:javascript
运行
复制
result = np.concatenate([ a[ind[:,i]] for i in range(ind.shape[1]) ], axis=1)
票数 0
EN

Stack Overflow用户

发布于 2020-08-27 17:39:22

您可以在一行中使用NumPy完成此操作:

代码语言:javascript
运行
复制
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]]
'''
票数 0
EN

Stack Overflow用户

发布于 2020-08-27 19:52:00

您可以使用水平堆叠np.hstack

代码语言:javascript
运行
复制
c = np.array(indexes)
np.hstack((a[c[:,0]],a[c[:,1]]))

输出:

代码语言:javascript
运行
复制
[[1 2 3 1 2 3]
 [1 2 3 4 5 6]
 [7 8 9 0 0 0]]
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63613005

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档