【问题标题】:optimize matrix multiplications优化矩阵乘法
【发布时间】:2013-01-29 16:41:34
【问题描述】:

给定:

  • 向量 v1, v2 (nx1),其中每个向量中的条目在区间 [0,1] 中。 v1 和 v2 可以稀疏也可以密集

  • 密集对称矩阵 M (nxn)(实际上是一个逻辑矩阵,其中条目为 0 或 1)

  • 一个稠密矩阵 E (nxn) 其中 E(i,j) = 1-E(j,i) 其中 E(i,j) 在区间 ]0,1[ 中。 E(i,j) = 1-E(j,i) 这种类型的矩阵有名字吗?

我想计算 s = Sum[(v1 * v2^T) .* M] 其中 .* 是逐元素乘法运算,而 Sum 是结果矩阵的所有条目的总和。 ^T 是转置操作。

给定 s 我想得到 x = Sum[(v1 * v2^T) .* E] / s

是否有任何计算上更有效的方法来执行这些乘法并获得 x?

谢谢。

【问题讨论】:

  • 任何特定的编程语言/环境?
  • 不管是哪种实现语言,我都想查找是否有任何快捷方式,但是可能使用 C/C++ 来提高速度。

标签: matrix-multiplication


【解决方案1】:

您的.* M 乘法只是一个选择,因此像这样将所选元素相加可能会更容易(在伪代码中,因为您没有给出语言的指示):

sum = 0;
for i=1 to n
    for j = i to n
        if M(i,j) then
           sum += v1(i)*v2(j)+v1(j)*v2(i);
        endif
    endfor
 endfor

您只需执行 2*k 加法和 k 次乘法,而不是执行所有 2*n^2 乘法和 n^2 加法(其中 k 是 M 的非零条目数,最多为 n^2)。

对于第二个操作,我认为无法加速它们,因此您必须显式计算它们。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-30
    • 2015-07-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多