巢狀陣列索引(Indexing Cell Arrays)

在基本巢狀陣列中提到過巢狀陣列的元素可以使用大括號 {} 來存取,但若是使用者需要將巢狀陣列中的元素取出並依然保持巢狀陣列,則可以使用小括號 () 來存取,以下的範例示範大括號與小括號的差異:

c = {"1", "2", "3"; "a", "b", "c"; "4", "5", "6"};

使用大括號取出元素:

c{2, 3}

輸出為

ans = c

使用小括號取出元素:

c(2, 3)

輸出為

ans =

{
  [1,1] = c
}

由上面的範例可以看出使用大括號是存取巢狀陣列中的元素,而小括號是存取巢狀陣列中的子巢狀陣列。

巢狀陣列的小括號使用方式與一般多維度的陣列相似,例如將巢狀陣列 c 的第一行與第三行中所有的元素都設為 0

c(:, [1, 3]) = {0}

輸出為

c =

{
  [1,1] = 0
  [2,1] = 0
  [3,1] = 0
  [1,2] = 2
  [2,2] = b
  [3,2] = 5
  [1,3] = 0
  [2,3] = 0
  [3,3] = 0
}

有另外一種寫法也可以:

c(:, [1, 3]) = 0;

這裡的 0 會被 Octave 自動替換為 {0} 然後指定給 c 的子巢狀陣列。

另外一個使用小括號的範例:

c = {1, 2, 3; 4, 5, 6};
c([1, 2], :) = c([2, 1], :)

這會將巢狀陣列 c 的第一行與第二行對調,輸出為

c =

{
  [1,1] =  4
  [2,1] =  1
  [1,2] =  5
  [2,2] =  2
  [1,3] =  6
  [2,3] =  3
}

使用大括號取得巢狀陣列中的元素會傳回逗點分隔序列(請參考逗點分隔序列)。例如使用大括號再將上面的巢狀陣列 c 的第一行與第二行對調回來:

[c{[1, 2], :}] = deal(c{[2, 1], :})

輸出為

c =

{
  [1,1] =  1
  [2,1] =  4
  [1,2] =  2
  [2,2] =  5
  [1,3] =  3
  [2,3] =  6
}

空矩陣 [] 可以用來刪除巢狀陣列中的元素,例如:

x = {"1", "2"; "3", "4"};
x(1, :) = []

輸出為

x =

{
  [1,1] = 3
  [1,2] = 4
}

使用大括號將巢狀陣列元素的內容刪除,但保留元素的空間:

x = {"1", "2"; "3", "4"};
x{1, 1} = [];
x{1, 2} = [];
x

輸出為

x =

{
  [1,1] = [](0x0)
  [2,1] = 3
  [1,2] = [](0x0)
  [2,2] = 4
}