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中过于缓慢.
从您的描述中,它听起来像一个简单的矩阵操作.您只需要确保C和S的尺寸合适.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问题所示).
| 归档时间: |
|
| 查看次数: |
10314 次 |
| 最近记录: |