![]() |
MATLAB中的向量到矩阵语法
有没有一种方法可以在MATLAB中组合2个向量,例如:
mat = zeros(length(C),length(S)); for j=1:length(C) mat(j,:)=C(j)*S; end 使用类似于以下内容的常规MATLAB语法: mat = C * S(1:length(S)) 这给出了“内部矩阵尺寸必须一致误差”,因为它正在尝试执行正常的矩阵运算。这不是标准的线性代数运算,所以我不确定如何在MATLAB中正确表达它,但是似乎不需要循环就可以实现,而这在MATLAB中太慢了。 回答: 根据您的描述,这听起来像是简单的矩阵运算。您只需要确保[B]C[/B]和[B]S的[/B]尺寸正确即可。 [B]C[/B]应该是列向量( [B]length(C)[/B] --1),而[B]S[/B]应该是行向量(1by- [B]length(S)[/B] )。假设它们是正确的尺寸,请执行以下操作: mat = C*S; 如果您不确定它们的尺寸,可以使用以下方法: mat = (C(:))*(S(:)'); [B]编辑:[/B]实际上,我对括号有点疯狂。其中一些是不必要的,因为没有操作顺序方面的问题。这是一个更干净的版本: mat = C(:)*S(:)'; [B]说明:[/B] MATLAB中的[URL="http://www.mathworks.com/access/helpdesk/help/techdoc/ref/mtimes.html"]矩阵乘法运算符[/URL]将根据要应用的向量的尺寸来产生[URL="http://en.wikipedia.org/wiki/Matrix_multiplication#Relationship_with_the_inner_product_and_the_outer_product"]内积[/URL] (导致标量值)或[URL="http://en.wikipedia.org/wiki/Matrix_multiplication#Relationship_with_the_inner_product_and_the_outer_product"]外积[/URL] (导致矩阵)。 上面的最后一个方程产生一个外积,这是因为使用了[URL="http://www.mathworks.com/access/helpdesk/help/techdoc/ref/colon.html"]冒号运算符[/URL]来重塑矢量自变量的维数。语法[B]C(:)[/B]重塑[B]C[/B]的内容到一个单一的列向量。语法[B]S(:)'[/B]将[B]S[/B]的内容重塑为列向量,然后将其转置为行向量。乘以后,将得到一个大小为矩阵( [B]length(C)[/B] × [B]length(S)[/B] )。 [B]注意:[/B]冒号运算符的这种用法适用于任何维数的向量和矩阵,从而使您可以将它们的内容重塑为单个列向量(这使某些操作更加容易,如[URL="https://stackoverflow.com/questions/709872/multi-dimension-any"]另一个SO问题所示[/URL] )。 [url=https://stackoverflow.com/questions/1033961]更多&回答...[/url] |
所有时间均为北京时间。现在的时间是 23:35。 |
Powered by vBulletin
版权所有 ©2000 - 2025,Jelsoft Enterprises Ltd.