【发布时间】:2016-12-30 18:14:09
【问题描述】:
我试图对某个加权和进行矢量化,但不知道该怎么做。我在下面创建了一个简单的最小工作示例。我想解决方案涉及 bsxfun 或 reshape 和 kronecker 产品,但我仍然没有设法让它工作。
rng(1);
N = 200;
T1 = 5;
T2 = 7;
T3 = 10;
A = rand(N,T1,T2,T3);
w1 = rand(T1,1);
w2 = rand(T2,1);
w3 = rand(T3,1);
B = zeros(N,1);
for i = 1:N
for j1=1:T1
for j2=1:T2
for j3=1:T3
B(i) = B(i) + w1(j1) * w2(j2) * w3(j3) * A(i,j1,j2,j3);
end
end
end
end
A = B;
对于二维情况,有一个聪明的答案here。
【问题讨论】:
-
你需要概括吗?因为如果是这样,我会将您的 N、T1、T2、T3 改写为数组。
-
其实我只是想要三维外壳。但概括可能对其他人有用:)
-
下面的概括:)
-
认为您可能对基准测试感兴趣。对于在 Octave 中执行的 1000 次迭代,循环版本用了 20 分钟,我的版本用 repmat 用了 1.66 秒,没有用了 0.92 秒,而 Suever 用了 0.77 秒。 :)
-
@TasosPapastylianou 太棒了!很有用!
标签: matlab vectorization weighted-average