在一个数组中添加不同大小的数组

Add differently sized arrays in one array

我想在一个列表中放入多个大小可能不同的数组。例如数组

我想在一个列表中包含 ABC,然后如果我访问列表的第一个元素,它将 return 给我 A 大小为 [300 x 3].

我会为您的 "list" 创建一个结构。在下面的示例中,我做了一个包含两个元素的结构,每个元素的 A、B 和 C 都带有一些数据:

% first element of struct
mystruct(1).A = ones(300,3);
mystruct(1).B = ones(250,3);
mystruct(1).C = ones(450,3);

% second element of struct with different data
mystruct(2).A = ones(300,3) + 1;
mystruct(2).B = ones(250,3) + 2;
mystruct(2).C = ones(450,3) + 3;

它 "looks" 像:

1x2 mystruct =

  1x2 struct array containing the fields:

    A
    B
    C

matlab / octave 为此目的使用所谓的 "cell-arrays"。 语法类似于数组,除了您使用 'braces' ({}) 而不是 'brackets' ([]).

例如

octave:1> a = [1,2,3], b = [1,2], c = [1,2,3,4]
a =   1   2   3
b =   1   2
c =   1   2   3   4

octave:2> d = {a, b, c}
d =   {
  [1,1] =   1   2   3
  [1,2] =   1   2
  [1,3] =   1   2   3   4
}

类似地,对 'index' 元胞数组使用大括号并得到它的 contents:

octave:3> d{1}
ans =   1   2   3

注意:您 可以 也可以像使用括号(即 ())的普通数组一样对其进行索引,但这 returns 个人 cells 本身(即以单元格数组形式)而不是它们的 contents:

octave:4> d(1)
ans =   {
  [1,1] =   1   2   3
}

本质上,'normal'(例如 'numerical')数组和 'cell-arrays' 之间的 'big' 区别是 'normal' 数组必须始终包含相同类型的元素,而在元胞数组中,每个元素可以是任何元素(包括另一个元胞数组)。