【问题标题】:How to vectorize np.dot between vectors located in arrays of vectors?如何在位于向量数组中的向量之间对 np.dot 进行向量化?
【发布时间】:2021-08-02 15:59:17
【问题描述】:

变量:

x 和 y 是具有形状 (N, 2) 的 N 个 2D 向量的数组。

问题:

有没有一种方法可以在两个数组中相同位置对应的向量之间进行点积,而无需像列表理解中那样显式写入元素:[np.dot(x[i], y[i]) for i in range(N)]

通常,在 numpy 的其他函数中,我使用选项 axis = 1 来实现这一点,但我发现它在 np.dot 中不存在。有什么办法可以矢量化这个操作吗?

【问题讨论】:

  • (x * y).sum(axis=1) 应该做 IIUC

标签: python numpy vectorization numpy-ndarray


【解决方案1】:

试试这个:

N = 10
x = np.random.randn(N,2)
y = np.random.randn(N,2)

np.einsum("ij,ij->i", x, y)

【讨论】:

  • 在我的电脑和我的特定问题中,这个答案比(x * y).sum(axis=1)快3倍
  • 真的很快!但我不确定这是否可以扩展到多线程/多进程。这个np.einsum 可能不会并行运行,即使给定optimize=True。我看到discussion 指出类似的收缩路线是内存有限的,并且可能不会为更多线程获得加速。任何人都可以验证这一说法吗?
猜你喜欢
  • 2019-11-10
  • 1970-01-01
  • 1970-01-01
  • 2013-02-17
  • 1970-01-01
  • 1970-01-01
  • 2020-05-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多