![819da013b3c1f6e47561c3b630f36f54.png](https://i-blog.csdnimg.cn/blog_migrate/d12125868d9e5dcec0254b1743dbde81.jpeg)
之前写 Clark 变换和 Park 变换的时候,写过一个三维矩阵的相乘,为了不写循环绕了一个非常大的弯,现在试试正常写循环,用 arrayfun 省循环,用自动扩展乘法并加和省循环,三种速度都是个啥水平。
直接上代码
clear
matsize = 50000;
a = rand(100,100,matsize);
b = rand(100,1,matsize);
tic
c = zeros(100,1,matsize);
for i = 1:matsize
c(:,:,i) = a(:,:,i)*b(:,:,i);
end
c = squeeze(c);
toc
tic
d = cell2mat(arrayfun(@(i)a(:,:,i)*b(:,:,i),1:matsize,'UniformOutput',false));
toc
tic
e = squeeze(sum(a.*permute(b,[2,1,3]),2));
toc
运行结果如下
>> test_speed
历时 0.665446 秒。
历时 0.862202 秒。
历时 0.881269 秒。
不愧是阴间写法,速度最慢,最难理解。
<