【问题标题】:A strange dot product in PythonPython中一个奇怪的点积
【发布时间】:2016-01-08 07:01:02
【问题描述】:

所以我有两个矩阵,一个是 I×H,另一个是 I×I,其中 H = M*I。我想取第一个矩阵的前 M 行与第二个矩阵的第一行的点积,接下来的 M 行与第二个矩阵的下一行,等等。

有人知道在 NumPy 中执行此操作的简单方法吗?我试图避免循环。

【问题讨论】:

  • 你有没有尝试过?
  • 如您所写,第一个矩阵将有 I 行和 H=M * I 列。你的意思是反过来吗? (H=M * I 行和 I 列)?
  • 顺序不是很重要。我的问题更多是索引问题。但是,是的,HxI dot IxI。
  • @Divakar 我尝试从原始对角矩阵生成块对角矩阵并将第二个变平。这给出了所需的结果,但有很多乘以零。我尝试使用scipy.sparse.block_diag 生成稀疏矩阵,但无法传递矩阵列表。
  • 我了解您正在尝试避免循环,但可能会使用循环来实现它,如果速度很慢,请尝试删除循环。

标签: python arrays numpy linear-algebra


【解决方案1】:
import numpy as np

# just some examples
i = 5
m = 3
h = m * i
first = np.arange(h * i).reshape(h, i) # note dimension H×i, not I×H
second = np.arange(i * i).reshape(i, i)

# Let's compute the dot product of 
# every column of `first`
# with every column of `second` (i.e. every row of `second` transposed):
#
full_matrix_product = np.dot(first, second.transpose()) # no (explicit) loops,
                                                        # but does much more
                                                        # multiplications than
                                                        # we need in the end.

# Extract the specific dot products you want:
wanted_rows = np.arange(h)
wanted_columns = np.arange(m).repeat(i)
result = full_matrix_product[wanted_rows, wanted_columns].reshape(m, i)

【讨论】:

    猜你喜欢
    • 2011-12-20
    • 1970-01-01
    • 2018-08-07
    • 2020-06-09
    • 1970-01-01
    • 2015-01-18
    • 1970-01-01
    • 1970-01-01
    • 2018-10-07
    相关资源
    最近更新 更多