Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/13.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_Matrix_Octave_Vectorization_Bsxfun - Fatal编程技术网

Matlab 逐层乘以矩阵

Matlab 逐层乘以矩阵,matlab,matrix,octave,vectorization,bsxfun,Matlab,Matrix,Octave,Vectorization,Bsxfun,我希望在没有循环的情况下执行此操作: % A ~ 4x2x3; B ~ 4x3x2; C ~ 4x2x2; for i=1:4 C(i,:,:) = squeeze(A(i,:,:))*squeeze(B(i,:,:)); end 谢谢 还没有对此进行基准测试(因此不能保证速度更快),但下面是: [L, ma, na] = size(A); [L, mb, nb] = size(B); AX = reshape(permute(A, [2 1 3]), [], na); BX = res

我希望在没有循环的情况下执行此操作:

% A ~ 4x2x3; B ~ 4x3x2; C ~ 4x2x2;
for i=1:4
  C(i,:,:) =  squeeze(A(i,:,:))*squeeze(B(i,:,:));
end
谢谢

还没有对此进行基准测试(因此不能保证速度更快),但下面是:

[L, ma, na] = size(A);
[L, mb, nb] = size(B);
AX = reshape(permute(A, [2 1 3]), [], na);
BX = reshape(permute(B, [2 3 1]), mb, []);
CX = reshape(permute(reshape(AX * BX, ma, L, nb, L), [1 3 2 4]), ma, nb, []);
C = permute(CX(:, :, 1:L + 1:end), [3 1 2]);

请注意,如果
A
B
很大,您也可能会遇到内存问题(在这种情况下,您必须求助于循环)。

@Dan谢谢!但是我需要一个简单的代码…这不应该是
C(I,:,:)=a(I,:,)*B(I,:,:)
或者什么吗?也许你的意思是
C(I,:,,:)=a(I,:,:)*B(I,:,:)
C(i,:,:)=A*B