【发布时间】:2014-07-25 05:07:03
【问题描述】:
我在 Matlab 中有以下四个嵌套循环:
timesteps = 5;
inputsize = 10;
additionalinputsize = 3;
outputsize = 7;
input = randn(timesteps, inputsize);
additionalinput = randn(timesteps, additionalinputsize);
factor = randn(inputsize, additionalinputsize, outputsize);
output = zeros(timesteps,outputsize);
for t=1:timesteps
for i=1:inputsize
for o=1:outputsize
for a=1:additionalinputsize
output(t,o) = output(t,o) + factor(i,a,o) * input(t,i) * additionalinput(t,a);
end
end
end
end
共有三个向量:一个输入向量、一个附加输入向量和一个输出向量。所有这些都是由因素联系在一起的。每个向量都有给定时间步长的值。我需要每个给定时间步的所有组合输入、附加输入和因素的总和。稍后,我需要从输出到输入进行计算:
result2 = zeros(timesteps,inputsize);
for t=1:timesteps
for i=1:inputsize
for o=1:outputsize
for a=1:additionalinputsize
result2(t,i) = result2(t,i) + factor(i,a,o) * output(t,o) * additionalinput(t,a);
end
end
end
end
在第三种情况下,我需要每个时间步长上所有三个向量的乘积:
product = zeros(inputsize,additionalinputsize,outputsize)
for t=1:timesteps
for i=1:inputsize
for o=1:outputsize
for a=1:additionalinputsize
product(i,a,o) = product(i,a,o) + input(t,i) * output(t,o) * additionalinput(t,a);
end
end
end
end
这两个代码 sn-ps 可以工作,但速度非常慢。如何删除嵌套循环?
编辑:添加了值并更改了一些小东西,因此 sn-ps 是可执行的
Edit2:添加了其他用例
【问题讨论】:
-
这个问题不是关于统计的,可能不适合这个论坛。
-
请包括一个最小的例子。定义所有变量,以便我们可以运行代码
-
您是否打算保存循环内部的值,因为您目前不在
标签: arrays performance matlab multidimensional-array vectorization