冒号运算符在这里做什么?

时间:2019-05-29 18:51:18

标签: matlab colon

这些代码行在做什么?

x0 = rand(n,2)
x0(:,1)=W*x0(:,1)
x0(:,2)=H*x0(:,2)
x0=x0(:)

这只是一个大列向量吗?

1 个答案:

答案 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是标量或用于可行矩阵乘法的适当大小的数组(我的猜测是标量)。符号.*可用于逐元素乘法;有关更多详细信息,请参见herehere
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