Сохраните вектор "один ко многим" в MATLAB

Возможно, это простой вопрос, но я не могу найти ответ. Как хранить пары ключ-значение, где значение представляет собой массив чисел? Например:

 X = [1, [1,2,3]]
 Y = [4, [2,4,2]]

и так далее. Какую структуру данных следует использовать для хранения таких массивов «один ко многим»?

РЕДАКТИРОВАТЬ:

Я пытаюсь создать такую ​​структуру: struct(1, 1:3), но это дает ошибку «Имена полей должны быть строками». Но мне нужно целое число здесь.


person tw-S    schedule 19.07.2014    source источник
comment
Ваши ключи уникальны? Является ли число значений, присвоенных ключу константой?   -  person EJG89    schedule 21.07.2014


Ответы (3)


Вы можете использовать карты:

>> m = containers.Map({1 4}, {[1,2,3], [2,4,2]})
m = 
  Map with properties:
        Count: 2
      KeyType: double
    ValueType: any

>> m(1)
ans =
     1     2     3

>> m(4)
ans =
     2     4     2

>> m.keys
ans = 
    [1]    [4]

>> celldisp(m.values)
ans{1} =
     1     2     3
ans{2} =
     2     4     2
person Amro    schedule 19.07.2014

Один из способов — использовать структуру на лету. У меня нет MATLAB для проверки этого кода, но он должен работать.

X.x = 1;
X.y = [1, 2, 3];

Y.x  = 4;
Y.y = [2,4,2];
person Makketronix    schedule 19.07.2014
comment
Спасибо, но при этом имена полей должны быть строками. - person tw-S; 19.07.2014
comment
у вас есть переменные с именем x, y? Попробуйте X.coor1, X.coor2. . . - person Makketronix; 19.07.2014
comment
Это происходит при создании структуры. Я делаю это так: struct(1, 1:3) ‹--- эта строка выдает ошибку. Однако этот: struct('f', 1:4) работает хорошо. - person tw-S; 19.07.2014

Структура также является опцией.

>> x = struct('key', {1,4}, 'value', {[1,2,3], [2,4,2]})

x = 

1x2 struct array with fields:

    key
    value

>> x.key

ans =

     1


ans =

     4

>> x.value

ans =

     1     2     3


ans =

     2     4     2

>> x(1)

ans = 

      key: 1
    value: [1 2 3]

>> x(2)

ans = 

      key: 4
    value: [2 4 2]

>> x(1).key

ans =

     1

>> x(2).value

ans =

     2     4     2

>> 
person Yvon    schedule 21.07.2014