【问题标题】:Vectorized component wise multiplication向量化分量乘法
【发布时间】:2018-02-20 22:40:34
【问题描述】:

ab两个矩阵中存储2N个大小为d的向量,其中a.shape = b.shape = (N,d)(所以a[i]a中的第i个向量,其中包含N个向量,与b相同)。

我想以矢量化方式构造形状为(N,d,d) 的张量T 使得T[i,p,q] = a[i,p]*b[i,q]

换句话说,我想要一个张量,它的第 i 个分量是 a[i]b[i] 的元素的分量乘法的 (d 乘 d)-矩阵,而无需执行 for 循环。

我尝试在多个轴上使用 tensordot,或者 dot 无济于事。有什么想法吗?

【问题讨论】:

  • a[i] 是第 i 列或行向量吗?
  • 您能否在一个最小工作示例中发布一些测试数据以及失败的tensordotdot 操作?

标签: python numpy


【解决方案1】:

使用einsum,计算会自行写入:

np.einsum('ip,iq->ipq', a,b)

这个表达式也清楚地表明没有求和——只有乘积。这是一种外积,而不是内积或矩阵积。在这种情况下,tensordot 将无济于事。但广播应该:

a[:,:,None] * b[:,None,:]

(有时我必须颠倒None 的顺序。这有助于使用不同的pq 来检查。)

您没有提供 MCVE 来检查我的答案。

【讨论】:

  • 非常感谢您简洁明了的回答
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-03-16
  • 2023-01-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多