这些代码行在做什么?
x0 = rand(n,2)
x0(:,1)=W*x0(:,1)
x0(:,2)=H*x0(:,2)
x0=x0(:)
这只是一个大列向量吗?
答案 0 :(得分:2)
我建议您使用MATLAB Tutorial,因为索引数组是一项基本技能。另请参见Basic Concepts in MATLAB。以下逐行描述可帮助您入门。
这些代码行在做什么?
让我们逐行介绍。
1。。该行使用rand
生成uniform random numbers的 nx 2 矩阵(〜U(0,1))。
x0 = rand(n,2) % Generate nx2 matrix of U(0,1) random numbers
2。。第一列乘以W
在这种情况下,x0(:,1)
表示获取x0
的所有行(第一个参数中的冒号)和第一列(1)。这里,*
运算符指示W
是标量或用于可行矩阵乘法的适当大小的数组(我的猜测是标量)。符号.*
可用于逐元素乘法;有关更多详细信息,请参见here和here。
x0(:,1)=W*x0(:,1) % Multiply (all rows) 1st column by W
3。。第一列乘以H
。
使用与#2类似的逻辑。
x0(:,2)=H*x0(:,2) % Multiply (all rows) 2nd column by H
4。强制列
x0(:)
采用数组x0
并将所有元素强制放入单个列中。
摘自colon的文档:
A(:)将A的所有元素整形为单个列向量。这有 如果A已经是列向量,则无效。
一个相关的操作是通过将其与transpose运算符组合来强制使用行向量。例如,尝试以下操作:x0(:).'
x0=x0(:) % Force Column
相关帖子:
What is Matlab's colon operator called?
How does MATLAB's colon operator work?
Combination of colon-operations in MATLAB