例如,我有两个矩阵 A 和 B
A = [ 1 2 3; 5 4 3; ...]和 B = [ 1; 2;3;4;5个;6](行矩阵)
我想要这个
A*B = [1*1 2*1 3*1; 5*2 4*2 3*2;...]没有循环。是否可以?
例如,我有两个矩阵 A 和 B
A = [ 1 2 3; 5 4 3; ...]和 B = [ 1; 2;3;4;5个;6](行矩阵)
我想要这个
A*B = [1*1 2*1 3*1; 5*2 4*2 3*2;...]没有循环。是否可以?
从数学上讲,两个矩阵只有在它们的维度一致时才能相乘;如果矩阵A是m*n并且矩阵B是n*k那么你可以形成A*B具有维度的产品m*k。因此,从数学的角度来看,您的矩阵不能后乘以Awhich is 。如果您的矩阵实际上是,那么您可以形成具有维度的产品。请注意使用转置运算符从此处转置到此处。m*3B6*1A6*3B'*A1*3'B6*11*6
Matlab 的矩阵乘法(使用*运算符)符合矩阵是一致的数学要求。Matlab 还提供了另一个矩阵乘法运算符 ,.*它执行逐个元素的乘法,即它(i,j)通过乘法来形成结果的每个元素A(i,j)*B(i,j)。我看到@Thor 已经给了你一种方法来做到这一点。
如果您要做的是将行中的每个元素乘以另一种方法的行i中A的标量,则iB
A.*(repmat(B,1,size(A,2)))
或者,您可以使用更高效但可能稍微不那么直观的方法,
bsxfun(@times, A,B);
以通用方式执行此操作需要A并且B具有相同数量的元素。这样做的一种方法是重塑 -> 乘法 -> 重塑,例如:
[x y] = size(A);
AmB = reshape(A, 1, x*y) .* transpose(B);
AmB = reshape(AmB, x, y);
如果A行数与向量中的元素相同B
AmB = diag(B) * A
因为您要求的是行缩放。
这种表达方式优雅但不高效。对于高大的矩阵,应该首选A列上的循环。AmB(:,i) = A(:,i) .* B