MATLAB中的向量矩阵语法

NoM*_*ots 2 matlab vector matrix

有没有办法在MATLAB中组合2个向量,这样:

mat = zeros(length(C),length(S));
for j=1:length(C)
    mat(j,:)=C(j)*S;
end
Run Code Online (Sandbox Code Playgroud)

使用类似于的常规MATLAB语法:

mat = C * S(1:length(S))
Run Code Online (Sandbox Code Playgroud)

这给出了"内部矩阵尺寸必须一致的误差",因为它试图进行正常的矩阵运算.这不是一个标准的线性代数运算,所以我不确定如何在MATLAB中正确表达它,但似乎应该可以在不需要循环的情况下实现,这在MATLAB中过于缓慢.

gno*_*ice 5

从您的描述中,它听起来像一个简单的矩阵操作.您只需要确保CS的尺寸合适.C应该是列向量(长度(C) -by-1),S应该是行向量(1-by- length(S)).假设它们是正确的尺寸,请执行以下操作:

mat = C*S;
Run Code Online (Sandbox Code Playgroud)

如果你不确定它们的尺寸,这应该有效:

mat = (C(:))*(S(:)');
Run Code Online (Sandbox Code Playgroud)

编辑:实际上,我对括号有点疯狂.其中一些是不必要的,因为没有操作顺序问题.这是一个更清洁的版本:

mat = C(:)*S(:)';
Run Code Online (Sandbox Code Playgroud)

说明:

MATLAB中的矩阵乘法运算符将产生内积(产生标量值)或外积(产生矩阵),具体取决于应用矢量的维数.

上面的最后一个等式产生外部产品,因为使用冒号运算符来重新构造向量参数的维度.语法C(:)重塑的内容Ç成一个单一的列向量.语法S(:)'S的内容重新整形为列向量,然后将其转换为行向量.当相乘时,这导致尺寸矩阵(长度(C) - 长度(S)).

注意:冒号运算符的这种使用适用于任何维度的向量和矩阵,允许您将其内容重新整形为单个列向量(这使得某些操作更容易,如其他SO问题所示).