首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Numpy添加所有向量组合

Numpy添加所有向量组合
EN

Stack Overflow用户
提问于 2022-02-01 02:22:36
回答 2查看 72关注 0票数 0

什么是最有效的方法来添加两个向量数组的所有组合?例如,我想要的是:

代码语言:javascript
复制
a = np.array([[1,2,3], [4,5,6]])
b = np.array([[7,8,9], [10,11,12]])
[ai + bj for ai in a for bj in b]

给出

代码语言:javascript
复制
[array([ 8, 10, 12]),
 array([11, 13, 15]),
 array([11, 13, 15]),
 array([14, 16, 18])]

它是一个带有向量的网格,而不是主数据类型。

我尝试过显式地构造meshgrid结果,这比列表理解更快:

代码语言:javascript
复制
a_tile = np.tile(a, (2, 1))
代码语言:javascript
复制
array([[1, 2, 3],
       [4, 5, 6],
       [1, 2, 3],
       [4, 5, 6]])
代码语言:javascript
复制
b_repeat = np.repeat(b, 2, axis=0)
代码语言:javascript
复制
array([[ 7,  8,  9],
       [ 7,  8,  9],
       [10, 11, 12],
       [10, 11, 12]])
代码语言:javascript
复制
a_tile + b_repeat
代码语言:javascript
复制
array([[ 8, 10, 12],
       [11, 13, 15],
       [11, 13, 15],
       [14, 16, 18]])

这有效率吗?我在寻找一种广播数组的方法,这样就不会显式地构造网格了。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-02-01 03:41:23

您可以尝试以下方法:

代码语言:javascript
复制
import numpy as np

a = np.array([[1,2,3], [4,5,6]])
b = np.array([[7,8,9], [10,11,12]])

(a[..., None] + b.T).transpose(0, 2, 1).reshape(-1, 3)

它规定:

代码语言:javascript
复制
array([[ 8, 10, 12],
       [11, 13, 15],
       [11, 13, 15],
       [14, 16, 18]])
票数 0
EN

Stack Overflow用户

发布于 2022-02-01 02:59:52

您可以使用广播数组。

代码语言:javascript
复制
N = 2 #number of repeats
your_req_array = np.broadcast_to(b.T, (N,b.shape[1], b.shape[0])).transpose(2,0,1).reshape(-1,b.shape[1]) + np.broadcast_to(a, (N,a.shape[0], a.shape[1])).reshape(-1,b.shape[1])
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70934967

复制
相关文章

相似问题

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