x = x(:)在matlab中是什么意思,其中x是向量?

时间:2012-01-15 02:27:56

标签: matlab

谷歌这个问题很难。我是Matlab的新手并看到了以下声明,但我看不出它是如何做的。 doe x = x(:) do?

7 个答案:

答案 0 :(得分:13)

:colon operator。在此上下文中,它将x重新整形为一维列向量。

所以这段代码:

x = [ 1 3
      2 4 ];

x = x(:);

disp(x)

结果:

1
2
3
4

答案 1 :(得分:2)

x(:)将数组转换为列向量。

More about the colon operator

答案 2 :(得分:2)

此语法通常用于确保x是列向量:

x = x(:)

同样,此行确保x是行向量

x = x(:)'

答案 3 :(得分:2)

正如其他人所说,x(:)将x转换为矢量,特别是列矢量。关键是它使你的代码对我的事故提供行向量的用户健壮。例如,

x = 1:5;

创建了一个ROW向量。某些操作需要列向量。由于x(:)对已经是列向量的向量没有任何作用,因此这是一种编写健壮,稳定代码的方法。

当然,如果x是3x4矩阵,它仍然会将x转换为长度为12的列向量,因此最好的代码需要测试类似的东西,如果它是一个问题。

答案 4 :(得分:1)

x(:)重塑你的矩阵。

因此,如果你的矩阵是

1 2 3
5 6 7
8 9 10

调用x=x(:)x设置为

1
5
8 
2
6
9
3
7
10

答案 5 :(得分:1)

如果x是矩阵,如下所示:3 * 3矩阵,

    x=[1,2,3;4,5,6;7,8,9];
    x=x(:);

语句x = x(:)将矩阵列为列向量。 输出将是

    1
    2
    3
    4
    5
    6
    7
    8    
    9

当x是行向量时,获得的结果相同。

因此通常,x(:)将x的元素列为列向量。

答案 6 :(得分:1)

此运算符告诉matlab也尝试转换数据类型。

例如:

两种数据类型都设置为完全不同的类型:

>> foo = uint8(0);

>> bar = double(0);

使用" whos"检查数据类型命令:

>> whos foo bar
  Name      Size            Bytes  Class     Attributes

  bar       1x1                 8  double              
  foo       1x1                 1  uint8               

使用(:)运算符将uint8分配到double:

>> bar(:) = foo;

它仍然是双重

>> whos foo bar
  Name      Size            Bytes  Class     Attributes

  bar       1x1                 8  double              
  foo       1x1                 1  uint8   

使用没有(:)运算符的unit8分配double:

>> bar = foo;

并且它更改为uint8数据类型:

>> whos foo bar
  Name      Size            Bytes  Class     Attributes

  bar       1x1                 8  uint8      
  foo       1x1                 1  uint8