Инициализирующая структура в Matlab - PullRequest
2 голосов
/ 14 декабря 2011

Я пытаюсь инициализировать структуру в MATLAB, как в коде C

typedef struct{
 float x;
 float y;
} Data

Data datapts[100];

Из matlab я знаю, как создать структуру:

Data = structure('x',0,'y',0)

а как создать 100 экземпляров?

Или это обычно не делается в MATLAB? Предпочитает ли MATLAB динамическое распределение при добавлении новых данных?

Спасибо за вашу помощь ..

Ответы [ 3 ]

10 голосов
/ 14 декабря 2011

Я не знаю C, поэтому я не знаю, как ваш код инициализирует структуру.Однако рассмотрим следующие две возможности:

1.Структура массив data с 100 элементами, каждое из которых имеет два поля x и y

Вы можете инициализировать пустую структуру с помощью

data = struct('x', cell(100,1), 'y', cell(100,1));

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

Пример:

elements = struct(...
    'name',         {'Hydrogen', 'Helium', 'Lithium'},...
    'atomicWeight', {1, 4, 7}, ...
    'symbol',       {'H', 'He', 'Li'});

elements(1)
ans = 

        name: 'Hydrogen'
atomicWeight: 1
      symbol: 'H'

Таким образом, вы можете получить доступ к каждой отдельной структуре, чтобы получить ее свойства.Теперь, если вы хотите добавить массив массива со следующими 10 элементами в этот список, вы можете использовать cat, так же, как и для матриц.

2.Структура data с двумя полями x и y, каждое из которых содержит 100 элементов

. Вы можете инициализировать это как

data = struct('x',zeros(100,1),'y',zeros(100,1));

и получить доступ к каждому элементу поля как data.x(1).Обычно это используется, когда у вас есть одна «вещь» с несколькими свойствами, которые могут содержать разные значения.

Пример:

weather=struct('time',{{'6:00','12:00','18:00','24:00'}},...
    'temperature',[23,28,25,21]);

Как только вы понимаете структуры и массивы структур и то, как онииспользованные и проиндексированные, вы можете использовать их более сложными способами, чем на простой иллюстрации выше.

5 голосов
/ 14 декабря 2011
repmat(Data,100,1);

Вы можете присвоить ему данные с помощью:

Data(1).x = 10;
Data(1).y = 20;
1 голос
/ 14 декабря 2011

В дополнение к другим методам, описанным @yoda и @Jacob, вы можете использовать cell2struct.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...