【问题标题】:Vectorize the sum of outer products of coresponding columns of two matrices using Matlab/Octave使用 Matlab/Octave 向量化两个矩阵的对应列的外积之和
【发布时间】:2017-05-02 06:21:47
【问题描述】:

假设我有两个矩阵AB,它们由如下的列向量组成。

A = [a_1,a_2,...,a_N];
B = [b_1,b_2,...,b_N];

有什么方法可以将A中每一列的外积之和的计算与B中的相应列向量化。这是我的非向量化解决方案。

S = zeros(size(A,1), size(B,1));
for n=1:N
    S = S + A(:,n)*B(:,n)';   % S = S + a_n * b_n'
end

任何帮助将不胜感激。

【问题讨论】:

  • 这是什么语言?
  • 这是 Matlab。抱歉,出于某种原因,我认为这是 Matlab 特定问题的地方。
  • 没问题。我正在为 Matlab 添加标签,以便观看该标签的人可以看到您的问题。
  • 您所做的不只是 A * B' 吗?鉴于 N = 列向量的数量,您的循环应该准确给出 A * B'

标签: matlab matrix vector octave product


【解决方案1】:

您不清楚 N 是什么,但我假设 N = 列向量的数量 - 这意味着您只是在做 A * B'

A = rand(3,4);
B = rand(3,4);
N = size(A,2);
S = zeros(size(A,1), size(B,1));
for n=1:N
  S = S + A(:,n)*B(:,n)';   % S = S + a_n * b_n'
end
%Check that you are doing A*B'
S == A*B'
>> ans =

 1     1     1
 1     1     1
 1     1     1

【讨论】:

  • 不,A*B' 与我想要实现的不同。请注意,在我的情况下,A 中的每个第 i 列都只会乘以 B 中的第 i 列。
  • @Andrew 怎么不是?给我一个例子来证明它不是,我在你的答案中使用了这个例子,并获得了几乎 500 倍的结果。
  • 在实施反向传播时,我还认为“不,这不可能是正确的”......但这只是技巧。
猜你喜欢
  • 1970-01-01
  • 2019-07-12
  • 1970-01-01
  • 2013-04-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-10-12
  • 1970-01-01
相关资源
最近更新 更多