假设我有两个向量:
A = [1 2 3];
B = [1 2];
我需要一个类似于A*B
乘法的函数来产生以下输出:
[
1 2 3
2 4 6
]
似乎不允许A*B
,A*B'
或A.*B
之类的内容,因为元素的数量不相同。
我设法做到这一点的唯一方法(我在MATLAB上很新)使用ndgrid
制作两个具有相同数量元素的矩阵,如下所示:
[B1,A1] = ndgrid(B, A);
B1.*A1
ans =
1 2 3
2 4 6
如果元素数量很大,这会有很好的表现吗? 在MATLAB中有更好的方法吗?
实际上我正试图用MATLAB解决以下问题:
t = [1 2 3]
y(t) = sigma(i=1;n=2;expression=pi*t*i)
尽管如此,即使有更好的方法来解决实际问题,了解第一个问题的答案也会很有趣。
答案 0 :(得分:6)
你在谈论outer product。如果A和B都是行向量,那么您可以使用:
A'*B
如果它们都是列向量,那么您可以使用
A*B'
matlab中的*
运算符代表matrix multiplication。矩阵乘法的最基本规则是第一个矩阵的列数必须与第二个矩阵的行数匹配。假设我有两个矩阵A和B,分别为MxN和UxV。然后我只能在以下条件下执行矩阵乘法:
A = rand(M,N);
B = rand(U,V);
A*B % Only valid if N==U (result is a MxV matrix)
A'*B % Only valid if M==U (result is a NxV matrix)
A*B' % Only valid if N==V (result is a MxU matrix)
A'*B' % Only valid if V==M (result is a UxN matrix)
还有四种可能的情况,但它们只是所示案例的转置。现在,由于向量只是一个只有一个非单一维度的矩阵,所以应用相同的规则
A = [1 2 3]; % (A is a 1x3 matrix)
B = [1 2]; % (B is a 1x2 matrix)
A*B % Not valid!
A'*B % Valid. (result is a 3x2 matrix)
A*B' % Not valid!
A'*B' % Not valid!
同样,还有其他四种可能的情况,但唯一有效的情况是B'*A
,它是A'*B
的转置,并产生2x3
矩阵。