【问题标题】:Is there a vectorized way to do matrix multiplication-like operations in NumPy?在 NumPy 中是否有一种矢量化的方式来进行类似矩阵乘法的运算?
【发布时间】:2020-07-01 16:54:27
【问题描述】:

我有一个形状为 m x n 的矩阵 A 和另一个形状为 k x n 的较小矩阵 B。我想计算 A 行和 B 行之间的欧式距离,生成形状为 m x k 的矩阵 C。我已经有一个函数dist(row1, row2)。使用循环这很简单,但是在 NumPy 中是否有一种矢量化的方式来做到这一点?

我相信我想要的可以转换为自定义矩阵乘法运算(如果我转置 B),并且this question 似乎朝着同一个方向前进,但最好的答案是重新排列操作以实现矢量化(我想使用我的单独函数dist(row1, row2))。第二个答案使用了一个单独的函数,但它也使用了循环。

【问题讨论】:

标签: python numpy matrix


【解决方案1】:

试试下面这可能有帮助吗?如果A 是形状mxn 并且B 是形状kxnC 应该是形状mxk

C = np.linalg.norm([A[:,None,:]-B],axis=-1)

【讨论】:

  • 您介意解释一下吗?好像不是很明显。
  • 对于行之间的欧式距离,您需要A 的每一行和B 的每一行之间的差异,但由于它们在第一维(行)中具有不同的形状,但在尾随暗淡中相同。 (n 列),您可以通过使用 None 关键字创建维度 1 来将它们设为 compatible。在差异之后你得到一个mxkxn 数组,并在形状n 的最后一个轴(-1)上使用np.linalg.norm,你得到欧几里得距离。我建议尝试一下您的数据或在您的帖子中提供示例输入和所需的输出以进行检查?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-09
  • 2020-09-04
  • 1970-01-01
相关资源
最近更新 更多