Как мне представить и получить доступ к элементам этой многозначной структуры данных?
Я пытаюсь реализовать алгоритм Брукса-Айенгара для объединения датчиков и пытаюсь представить следующую структуру данных в MATLAB.
A = {([1.5,3.2],4), ([0,2.7],5), ([0.8,2.8],4)}
Я пытался сделать следующее
B = {{[1.5,3.2],4},{[0,2.7],5}}
Но тогда я не знаю, как получить доступ к каждому элементу, т.е. 1.5
, 3.2
и 4
а также следующий набор значений. Я получаю один набор элементов из B{1}
, но я не могу получить отдельные значения после.
Любые идеи или указатели на соответствующие ссылки будут полезны.
3 ответа
С текущей структурой вы можете просто продолжить индексирование:
>> B{1}
ans =
[1x2 double] [4]
>> B{1}{1}
ans =
1.5000 3.2000
>> B{1}{1}(2)
ans =
3.2000
>> B{1}{2}
ans =
4
Чтобы удалить элемент из основной структуры, вы можете использовать следующий синтаксис B(1) = [];
:
>> B = {{[1.5,3.2],4},{[0,2.7],5}}
B =
{1x2 cell} {1x2 cell}
>> B(1) = []
B =
{1x2 cell}
>> B{1}
ans =
[1x2 double] [5]
>>
Вы также можете выбрать представление данных в структурном массиве (с некоторым лучшим именованием свойств):
>> s = struct('prop1',{4, 5},'prop2', {[1.5,3.2], [0,2.7]})
s =
1x2 struct array with fields:
prop1
prop2
>> s(1).prop1
ans =
4
>> s(1).prop2
ans =
1.5000 3.2000
>> s(1).prop2(2)
ans =
3.2000
Чтобы удалить элемент, вы можете использовать аналогичный синтаксис:
s(1) = []
Если вы хотите выполнить некоторые операции с элементами данных, вы также можете выбрать подход ООП и создать класс, который представляет отдельный элемент данных и, необязательно, класс, представляющий весь набор данных. Доступ к данным членов является естественным.
Если ваша версия MATLAB достаточно новая (т.е. >= R2013b), вы можете использовать table
за это:
A = table([1.5,3.2; 0,2.7; 0.8,2.8],[4; 5; 4],'VariableNames',{'name1','name2'});
Как видите, результат легко проверить (визуально) и легко получить:
A.name1(3,2) % is 2.8000
Если вы не можете использовать клетки, то я бы начал с cell2mat
и посмотрим, поможет ли это.
vals = cell2mat(B{2}) % returns the array vals=[0 2.7 5]
Вы также можете просто использовать ваши данные как обычную матрицу с самого начала:
B = [ 1.5, 3.2, 4; 0, 2.7, 5];
А затем используйте столбец 3 в качестве ключей, если это было вашим намерением (а они числовые). Если ключи не гарантированы числовыми, то структура может быть полезна.
редактировать: я думаю, DVarga дает более подробный и полезный ответ.