2011-02-24 30 views
3

兩個問題:單元陣列語法

1)我發現了一段代碼說像cellArr{x}{y}{3,8} = 1.0;,我想知道是什麼{3,8}手段。該程序將一組連接圖中的各個節點連接在一起。在這裏,我們會說「在圖的集合x中,圖3的y從3到8的連接具有1.0的頂點標籤。但是,一般來說MatLab中的語法{3,8}是什麼意思?

2)這可能不是這個問題的地方,但我真的應該使用單元格數組,如果我知道我總是會有頂點值,即小數/浮點數。矩陣會更好,因爲我知道我只會有一個單一的數據類型?

謝謝:)。

回答

4
  1. Cell arrays可具有多個維度,並且因此它們可以是indexed與多個標像任何其他multidimensional array。語法{3,8}正在索引一個(可能是)2-D單元陣列,在第三行和第八列中獲取單元的內容。

  2. 有兩種使用單元陣列主要有兩個原因:不同類型的存儲數據或不同尺寸的存儲數據。假設xy是您的示例中的標量索引,那麼cellArr是一個單元格數組,其索引爲x的單元格包含另一個單元格數組,其單元格編號爲y,其中包含一個存儲頂點標籤的2-D單元格數組。現在

    ,如果您的頂點的標籤都具有相同的數據類型都只有單非空(即不[])值,則在最低水平的2-d單元陣列也可以變成2-d數值數組,而你的索引將是這樣的:現在

    cellArr{x}{y}(3,8) = 1.0; %# Note the use of() instead of {} 
    

    問題就變成如何處理xy索引電池陣列的兩個封裝套。如果每個可通過y被索引細胞包含2- d數字數組所有相同尺寸和類型的,則該單元陣列可以變成3-d數字數組,可以被索引,像這樣:

    cellArr{x}(3,8,y) = 1.0; %# Here I've chosen to use y as the third dimension 
    

    最後,如果每一個可以通過x被索引細胞含有3- d數字數組,其再次所有相同尺寸和類型,那麼cellArr也可以變成一個4 d數字數組,可以被索引等所以:

    numArr(3,8,y,x) = 1.0; 
    

    您可以更改下標的順序(即尺寸爲numArr),但我把xy放在最後,所以如果你要索引一個像numArr(:,:,y,x)這樣的頂點標籤的子數組,它會把它作爲一個二維數組返回。如果您已將索引排序,以便您索引像numArr(x,y,:,:)這樣的頂點標籤的子數組,則它將返回結果作爲一個四維數組,其中包含兩個主要單獨維(您將不得不使用諸如SQUEEZE之類的函數刪除) 。

+1

「與每個單元存儲另一個單元陣列......每個單元存儲另一個單元陣列......每個單元存儲一個2-D單元陣列」 - 我相信這是不正確的,因爲單元陣列可以在任何單元中存儲任何數據類型和大小。在這種特殊情況下,我們可以說在'cellArr'中由標量數字'x'索引的單元格包含另一個單元格數組等。 – yuk 2011-02-24 20:32:41

+0

@yuk:的確,我基於這樣的假設進行概括:對於OP描述的特定問題,每個單元格陣列*可能*存儲相同類型的數據。但是,我會按照您的建議來細化文本。 – gnovice 2011-02-24 21:41:01

4
  1. 語法{3,8}是單元陣列索引,就像{x}{y}一樣。所以cellArr是細胞載體的細胞載體。其中一種細胞載體索引爲{x}。該單元矢量本身是由{y}索引的單元2d矩陣的矢量。最後,該單元矩陣由{3,8}索引,即第3行和第8列。
  2. 如果你所有的數據都是數值,那麼使用4維數組會更好。對於你的例子,這個數組將被索引numericArray[x, y, 3, 8]