Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Matlab 如何将其矢量化?_Matlab_Vectorization - Fatal编程技术网

Matlab 如何将其矢量化?

Matlab 如何将其矢量化?,matlab,vectorization,Matlab,Vectorization,这里“新”的大小,p1,p2,电流是TRxTR,氡是N_时间步x TR x TR x TR x TR 基本上,我在这里做的是一个固定的时间步长“ind”,使用转移概率p1*p2*radon计算前一个时间步长“ind-1”上的期望值 谢谢大家! 更新: 我能够将其半矢量化,如下所示: new = zeros(TR); for i1 = 1 : TR for i2 = 1 : TR for j1 = 1 : TR for j2 = 1 : TR

这里“新”的大小,p1,p2,电流是TRxTR,氡是N_时间步x TR x TR x TR x TR

基本上,我在这里做的是一个固定的时间步长“ind”,使用转移概率p1*p2*radon计算前一个时间步长“ind-1”上的期望值

谢谢大家!

更新:

我能够将其半矢量化,如下所示:

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
所以现在它的运行时间是16秒,而不是2分钟。有人能提出更多的改进建议吗?谢谢

我将“如何将其矢量化”解释为“如何使其更快”,至少回答这个问题。除非使用Matlab2015b或更新版本,否则访问类属性的速度很慢。性能测量

您可以使用临时变量来提高性能:

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
然后在代码中使用
radonslice(1,i1,i2,j1,j2)

我将“如何将其矢量化”解释为“如何使其更快”,至少回答这个问题。除非使用Matlab2015b或更新版本,否则访问类属性的速度很慢。性能测量

您可以使用临时变量来提高性能:

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

然后在代码中使用
radonslice(1,i1,i2,j1,j2)

self.radon
是的,self.radon只是一个类属性。我将删除self以减少混淆。请将其保留在代码中。我认为这是你失去大部分表现的地方!为什么呢你是说matlab JIT编译器无法优化它吗?
self.radon
是的,self.radon只是一个类属性。我将删除self以减少混淆。请将其保留在代码中。我认为这是你失去大部分表现的地方!为什么呢你是说MatlabJIT编译器不能优化它吗?嗯,你的链接讨论的是类方法,而不是属性。我尝试使用radodslice,但实际上速度较慢:整个模拟只需6分钟,而不是2分钟。这两次90%以上的时间都花在这些嵌套循环中。对不起。事实上,这一变化略微加快了速度。我估计错了:)问题是关于方法,但基准也包含属性,搜索
classdef属性:
有没有加速“挤压”的方法?哈哈,现在matlab profiler说大部分时间都花在那里了……你可以尝试
置换
矩阵,一旦超出循环
r2=permute(radon[4,5,1,2,3])
交换维度,然后
r2(:,:,ind-1,i1,i2)
Hm,您的链接讨论的是类方法,而不是属性。我尝试使用radodslice,但实际上速度较慢:整个模拟只需6分钟,而不是2分钟。这两次90%以上的时间都花在这些嵌套循环中。对不起。事实上,这一变化略微加快了速度。我估计错了:)问题是关于方法,但基准也包含属性,搜索
classdef属性:
有没有加速“挤压”的方法?哈哈,现在matlab profiler说大部分时间都花在那里了……你可以尝试
置换
矩阵,一旦超出循环
r2=permute(radon[4,5,1,2,3])
交换维度,然后
r2(:,:,ind-1,i1,i2)