【问题标题】:What is the colon operator doing here?冒号运算符在这里做什么?
【发布时间】:2019-05-29 18:51:17
【问题描述】:

这几行代码在做什么?

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

这只是一个大的列向量,还是?

【问题讨论】:

  • 这里用于选择x0的列。您可能需要考虑查看documentation 了解更多详情。
  • @Julius 我想说这种情况下的冒号是选择x0 的行(在这种情况下都是),而不是列。你确实最终得到了一个列向量。
  • @rinkert 最后,是的。这里x0(:, 1) 选择一列,x0(:)x0 重塑为单个列向量。

标签: matlab colon


【解决方案1】:

我鼓励您使用MATLAB Tutorial,因为索引数组是一项基本技能。另见Basic Concepts in MATLAB。下面逐行描述以帮助您入门。

这些代码行是做什么的?

让我们逐行看。
1. 这行使用rand 生成uniform random numbersn x 2 矩阵(~ U(0,1))。
x0 = rand(n,2) % Generate nx2 matrix of U(0,1) random numbers

2.将第一列乘以W
在这种情况下,x0(:,1) 表示获取x0所有行(第一个参数中的冒号)和第一列(第一个)。在这里,* 运算符表示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
x0 = x0(:).'     % Force Row

相关帖子:
What is Matlab's colon operator called?
How does MATLAB's colon operator work?
Combination of colon-operations in MATLAB

【讨论】:

    猜你喜欢
    • 2016-04-10
    • 1970-01-01
    • 2023-04-02
    • 1970-01-01
    • 2011-01-24
    • 1970-01-01
    • 2011-09-14
    • 2010-11-22
    相关资源
    最近更新 更多