Matlab矩阵的行与行的两个矩阵维的乘法不一致

时间:2012-08-29 12:41:11

标签: matlab matrix multiplication

我有两个矩阵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; ......] 没有循环。有可能吗?

3 个答案:

答案 0 :(得分:4)

从数学上讲,两个矩阵只有在尺寸符合的情况下才能成倍增加;如果矩阵Am*n而矩阵Bn*k,那么您可以形成具有维度A*B的产品m*k。因此,从数学的角度来看,A的矩阵m*3不能B后乘6*1。如果您的矩阵A实际上是6*3,那么您可以形成具有维度B'*A的产品1*3。请注意使用转置运算符'B6*1转换为1*6

Matlab的矩阵乘法(使用*运算符)符合矩阵一致的数学要求。 Matlab还提供了另一个矩阵乘法运算符.*,它执行逐个元素的乘法运算,即通过乘以(i,j)形成结果的每个元素A(i,j)*B(i,j)。我看到@Thor已经给你一种方法来做到这一点。

如果您要做的是将iA中的每个元素乘以iB中的标量,则另一种方法将

A.*(repmat(B,1,size(A,2)))

或者你可以使用更高效,但可能稍微不那么直观的

bsxfun(@times, A,B);

答案 1 :(得分:0)

以通用方式执行此操作要求AB具有相同数量的元素。这样做的一种方法是重塑 - >乘以 - >重塑,例如:

[x y] = size(A);
AmB   = reshape(A, 1, x*y) .* transpose(B);
AmB   = reshape(AmB, x, y); 

答案 2 :(得分:0)

如果A的行数与向量B

中的元素相同
AmB = diag(B) * A

因为您要求的是行缩放。

这个表达式优雅但效率不高。对于较高的A矩阵,应首选AmB(:,i) = A(:,i) .* B列上的循环。