【发布时间】:2012-03-05 13:58:58
【问题描述】:
我有 2 个矩阵:V 是正方形 MxM,K 是 MxN。调用跨行的维度x 和跨列的维度t,我需要评估 K 两个维度的积分(即总和)乘以 V 的 t 位移版本,答案是移位的函数(几乎像卷积,见下文)。总和由以下表达式定义,其中_{} 表示总和索引,并假定超出限制元素的零填充:
S(t) = sum_{x,tau}[V(x,t+tau) * K(x,tau)]
我设法通过t 维度上的单个循环来完成它(矢量化x 维度):
% some toy matrices
V = rand(50,50);
K = rand(50,10);
[M N] = size(K);
S = zeros(1, M);
for t = 1 : N
S(1,1:end-t+1) = S(1,1:end-t+1) + sum(bsxfun(@times, V(:,t:end), K(:,t)),1);
end
我有类似的表达式,我设法在没有 for 循环的情况下使用 conv2 和\或单个维度的镜像(翻转)的组合来评估它们。但是我看不出在这种情况下如何避免 for 循环(尽管看起来与卷积相似)。
【问题讨论】:
-
tau 的总和限制是多少?我想我可以用你的代码弄清楚...
-
只要它涵盖了 V 的所有非零元素,这并不重要(正如我所说,V 被假定为向左和向右补零)
-
你的代码给了我错误
Error using + Matrix dimensions must agree. -
对不起,S 应该是 [1,M]。修复。 (感谢您指出)。
-
再看这个,我还是有点糊涂。您的公式和代码之间似乎存在差异 --- 在前者中,
S的第t'th 条目仅取决于K的第t'th 列,但在后者中,这似乎不再是真的。
标签: performance matlab matrix vectorization