小编Ale*_*zel的帖子

如何在不循环的情况下在MATLAB中乘法张量?

假设我有:

A = rand(1,10,3);
B = rand(10,16);
Run Code Online (Sandbox Code Playgroud)

我想得到:

C(:,1) = A(:,:,1)*B;
C(:,2) = A(:,:,2)*B;
C(:,3) = A(:,:,3)*B;
Run Code Online (Sandbox Code Playgroud)

我能以某种方式将它乘以一行,以便更快吗?

如果我像这样创建新的张量b怎么办?

for i = 1:3
    b(:,:,i) = B;
end
Run Code Online (Sandbox Code Playgroud)

我可以乘以A和b来获得相同的C但速度更快吗?通过上面的循环创建b所花费的时间并不重要,因为我将需要C用于许多不同的As而B保持不变.

performance matlab vectorization multiplication multidimensional-array

7
推荐指数
2
解决办法
5894
查看次数

这可以优化以在MATLAB中更快地运行吗?

这是代码

S = size(shape,3)
shape = 1 - shape;

for i = 2:S
    SHAPE = prod(shape(:,:,1:i-1),3);
    for c = 1:3
        vision(:,:,c,i) = vision(:,:,c,i).*SHAPE;
    end
end

output = sum(vision,4);
Run Code Online (Sandbox Code Playgroud)

也许有一种方法来矢量化它?

顺便说一下shape,SHAPE它们是0和1的数组,因此它们可能以某种方式被用作逻辑.

optimization matlab loops vectorization

1
推荐指数
1
解决办法
48
查看次数