【发布时间】:2015-11-27 23:42:38
【问题描述】:
new = zeros(TR);
for i1 = 1 : TR
for i2 = 1 : TR
for j1 = 1 : TR
for j2 = 1 : TR
new(i1, i2) = new(i1, i2) + p1(i1, j1) * p2(i2, j2) * ...
self.radon(ind - 1, i1, i2, j1, j2) * ...
current(j1, j2);
end
end
end
end
这里“新”的大小,p1,p2,电流是TRxTR,氡气是N_timesteps x TR x TR x TR x TR。
我在这里所做的基本上是使用转移概率 p1 * p2 * radon 为固定时间步“ind”计算上一个时间步“ind -1”的期望。
谢谢!
更新:
我能够按如下方式对其进行半矢量化:
for i1 = 1 : TR
for i2 = 1 : TR
new(i1, i2) = sum(sum((p1(i1, :)' * p2(i2, :)) .* ...
squeeze(self.radon(ind - 1, i1, i2, :, :)) .* current));
end
end
所以现在它在 16 秒内运行,而不是 2 分钟。任何人都可以提出更多改进建议吗?谢谢!
【问题讨论】:
-
self.radon -
是的,self.radon 只是一个类属性。我将删除 self 以减少混乱。
-
把它留在代码中。我认为那是您失去大部分性能的地方!
-
怎么回事?你的意思是matlab JIT编译器不能优化这个吗?
标签: matlab vectorization