Как вы уже обнаружили, отображение структурных массивов по умолчанию в MATLAB не говорит вам ничего, кроме размеров массива и имен полей. Если вы хотите увидеть содержимое, вам придется создать форматированный вывод самостоятельно. Один из способов сделать это - использовать STRUCT2CELL для сбора содержимого структуры в массиве ячеек, а затем использовать FPRINTF для отображения содержимого ячейки в определенном формате. Вот пример:
>> regions = struct('State',{'New York'; 'Ohio'; 'North Carolina'},...
'Capital',{'Albany'; 'Columbus'; 'Raleigh'},...
'Population',{97856; 787033; 403892}); %# Sample structure
>> cellData = struct2cell(regions); %# A 3-by-3 cell array
>> fprintf('%15s (%s): %d\n',cellData{:}); %# Print the data
New York (Albany): 97856
Ohio (Columbus): 787033
North Carolina (Raleigh): 403892
Что касается вашего второго вопроса, вы можете собрать записи из полей 'State'
в массиве ячеек, сравнить их с данным именем с STRCMP , чтобы получить логический индекс , затем получите соответствующий элемент массива структуры:
>> stateNames = {regions.State}; %# A 1-by-3 cell array of names
>> stateIndex = strcmp(stateNames,'Ohio'); %# Find the index for `Ohio`
>> stateData = regions(stateIndex) %# Get the array element for `Ohio`
stateData =
State: 'Ohio'
Capital: 'Columbus'
Population: 787033
Примечание:
Как вы упомянули в комментарии, каждая запись 'Population'
в вашем массиве структуры в конечном итоге будет содержать весь вектор данных о населении 50 на 1. Это, вероятно, связано с тем, что file{3}
в вашем примере кода содержит vector , тогда как file{1}
и file{2}
содержат массивы ячеек . Чтобы правильно распределить содержимое вектора в file{3}
по элементам структурного массива, необходимо разбить вектор на части и поместить каждое значение в отдельную ячейку массива ячеек, используя перед этим NUM2CELL передавая его STRUCT . Определение Population
как это должно решить проблему:
Population = num2cell(file{3});