Matlab将矩阵与三维矩阵相乘

Matlab将矩阵与三维矩阵相乘,matlab,matrix,matrix-multiplication,Matlab,Matrix,Matrix Multiplication,我有一个矩阵a大小mxnx3,我有一个3x3矩阵K。现在我想做的是这样的: for row = 1:m for col = 1:n A(row,col,:) = K*[A(row,col,1);A(row,col,2);A(row,col,3)]; end end 我想要一个没有循环的高效解决方案,因为循环非常慢,因为mxn通常是图像的大小 有人有主意吗 M = 1000; N = 1000; L = 3; A = rand(M,N,L); K = rand(L,L); Q = res

我有一个矩阵
a
大小
mxnx3
,我有一个
3x3
矩阵
K
。现在我想做的是这样的:

for row = 1:m
 for col = 1:n
  A(row,col,:) = K*[A(row,col,1);A(row,col,2);A(row,col,3)];
 end
end
我想要一个没有循环的高效解决方案,因为循环非常慢,因为
mxn
通常是图像的大小

有人有主意吗

M = 1000;
N = 1000;
L = 3;
A = rand(M,N,L);
K = rand(L,L);
Q = reshape((K * reshape( A, [M*N, L] ).' ).', [M, N, L]);
错误检查:

Z = zeros(M,N,L);
for mm = 1 : M
  for nn = 1 : N
    Z(mm,nn,:) = K * squeeze( A(mm,nn,:) );
  end
end
max( abs( Z(:) - Q(:) ) )

ans =

      0

我当然喜欢运行时,但是当我运行我的代码和你的代码时,我比较两个输出,isequal(Q,A)给我0,因此两个结果矩阵是不一样的@SemtexB我添加了一个示例来证明我的代码是正确的。你确定错误不在你这边吗?你看到了多少错误?依靠
isequal
处理浮点数并不总是一个好主意。非常好。我也会这样做。
for row=1:rows for col=1:cols Cube(row,col,:)=knowed*[Cube(row,col,1);Cube(row,col,2);Cube(row,col,3)];end end Q=重塑((已知*重塑(立方体,[rows*cols,3]))。,[rows,cols,3]);isequal(Q,Cube)max(abs(Cube(:)-Q(:))sum(sum((Q-Cube)。^2))
给出输出
ans=0 ans=46940000 ans(:,:,1)=2.6636e+20 ans(:,:,2)=1.0880e+20 ans(:,:,3)=0
@SemtexB您正在使用
Cube
的新值计算
Q
。在for循环之前计算
Q