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
。