2012-01-15 720 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