Добавить массивы разного размера в один массив - PullRequest
1 голос
/ 18 октября 2019

Я хочу добавить в список несколько массивов, которые могут быть разных размеров. Например, массивы

  • A с размером [300 x 3],
  • B с размером [250 x 3] и
  • C с размером [450 x 3].

Я хочу иметь A, B и C в одном списке, а затем, если я получу доступ к первому элементу моего списка, он вернется ко мне A с размером [300 x 3].

Ответы [ 2 ]

3 голосов
/ 18 октября 2019

matlab / octave используют для этой цели так называемые «клеточные массивы». Синтаксис аналогичен массивам, за исключением того, что вы используете «скобки» ({}) вместо «скобок» ([]).

например,

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
}

Аналогично используйте фигурные скобки для'индексировать' массив ячеек и получить его содержимое :

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

Примечание: вы можете также проиндексировать его как обычный массив, используя скобки (то есть ()), но это возвращает отдельные ячейки сами по себе (т. е. в форме массива ячеек), а не их содержимое :

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

По сути, «большая» разницамежду «обычными» (например, «числовыми») массивами и «ячейками-массивами» заключается в том, что «нормальные» массивы должны всегда содержать элементы одного типа, тогда как в ячейках-массивах каждый элемент может быть чем угодно (включая другой массив ячеек).

1 голос
/ 18 октября 2019

Я бы создал структуру для вашего "списка". В следующем примере я сделал структуру с двумя элементами, каждый из которых имеет 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;

И это «выглядит» как:

1x2 mystruct =

  1x2 struct array containing the fields:

    A
    B
    C
...