2012-01-15 717 views

回答

13

:colon operator。在这种情况下,它将x重塑为一维列向量。

所以这个代码:

x = [ 1 3 
     2 4 ]; 

x = x(:); 

disp(x) 

结果:

1 
2 
3 
4 
+0

待办事项你知道它是否做了一次重塑(所以将复制写入)或者强制复制(即使x已经是一列)? – robince 2012-01-17 09:29:17

+0

@robince:好问题。我想认为'x(:)'完全等同于'reshape(x,[],1)'。但我不确定(我不确定这是否记录在任何地方)。我想可以试着通过分析来弄明白。 – 2012-01-17 10:11:56

+0

是的,我检查,似乎有正常的复制写semantis(2011b)。我不知道为什么我有这个想法强制要求复制 - 也许过去有一段时间。 – robince 2012-01-18 10:39:07

1

x(:)重塑你的矩阵。

由此,如果基质是

1 2 3 
5 6 7 
8 9 10 

主叫x=x(:)x

1 
5 
8 
2 
6 
9 
3 
7 
10 
2

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

x = x(:) 

同样,这条线可确保x是行向量

x = x(:)' 
2

正如其他已经说过,x(:)专门将x转换为向量,列向量。重点在于,它使您的代码对于提供行向量的用户在我的事故中健壮。例如,

x = 1:5; 

创造了一个行向量。一些操作将需要列向量。由于x(:)对已经是列向量的向量没有任何作用,所以这是一种编写健壮,稳定的代码的方式。

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

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的元素作为列向量。

1

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

例如:

这两种数据类型设置为不同类型:

>> foo = uint8(0); 

>> bar = double(0); 

检查数据类型与 “卫生组织” 命令:

>> whos foo bar 
    Name  Size   Bytes Class  Attributes 

    bar  1x1     8 double    
    foo  1x1     1 uint8    

分配UINT8到双用(:)运营商:

>> bar(:) = foo; 

和它仍然是一个双

>> whos foo bar 
    Name  Size   Bytes Class  Attributes 

    bar  1x1     8 double    
    foo  1x1     1 uint8 

分配双用unit8没有(:)操作:

>> bar = foo; 

,并变成一个UINT8数据类型:

>> whos foo bar 
    Name  Size   Bytes Class  Attributes 

    bar  1x1     8 uint8  
    foo  1x1     1 uint8