2016-12-04 3 views
0

У меня есть структура 10 x 10 с четырьмя полями a, b, c, d.Как преобразовать структуру в матрицу

Как преобразовать эту структуру в матрицу 10 x 10 с элементами только из поля a?

+0

Имеет ли поле только цифры? – TroyHaskin

+0

Возможный дубликат [Извлечь поле массива структуры в новый массив] (http://stackoverflow.com/questions/12082746/extract-field-of-struct-array-to-new-array) – saastn

ответ

2

Вы можете рассчитывать на то, что str.a возвращает comma-separated list , Поэтому мы можем объединить значения вместе и изменить размер результирующего массива на тот же размер, что и входная структура.

% If a contains scalars 
out = reshape([str.a], size(str)); 

% If a contains matrices 
out = reshape({str.a}, size(str)); 
0

Один лайнер раствор

res = cellfun(@(strctObj) strctObj.a,str,'UniformOutput',false); 

Дальнейшее объяснение

Определить функцию в одну строку, которая извлечь значение.

getAFunc = @(strctObj) strctObj.a; 

использование функции cellfun MATLAB, чтобы применить его на клетку и извлечь матрицу:

res = cellfun(@(strctObj) getAFunc ,strctCellObj,'UniformOutput',false); 

Пример

%initializes input 
N=10; 
str = cell(N,N); 
for t=1:N*N 
    str{t}.a = rand; 
    str{t}.b = rand; 
    str{t}.c = rand; 
    str{t}.d = rand; 
end 
%extracts output matrix 
res = cellfun(@(strctObj) strctObj.a,str,'UniformOutput',false);