假设我有:
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
这是代码
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的数组,因此它们可能以某种方式被用作逻辑.