2016-04-25 4 views
0

У меня есть массив классов (мы будем называть его a, размер Mx1), который содержит свойство (feature), которое содержит массив 1xN. Я пытаюсь получить новую матрицу, которая является MxN, которая содержит строки каждого из свойств объекта feature. Например:матрица свойств массива объектов

M = 3 
N = 4 
a(1,1).feature = [1 2 3 4] 
a(2,1).feature = [5 6 7 8] 
a(3,1).feature = [9 10 11 12] 

то, учитывая некоторые функции, ответ будет в конечном итоге, как:

ans = [1 2 3 4; 5 6 7 8; 9 10 11 12] 

В настоящее время я использую следующие:

ans = cell2mat({a.feature}') 

однако я чувствую должен быть способ сделать это без необходимости преобразования в ячейку, переключения измерений, а затем преобразования в матрицу. Правильно ли это, или это будет лучший способ решить проблему? Я не смог найти такую ​​функцию в документации.

ответ

1

Если у вас есть массив объектов, и вы получаете доступ к свойству с использованием точечного привязки, возвращается comma separated list. Этот список, разделенный запятыми can be passed to a function, появится в виде нескольких входных аргументов.

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

features = cat(1, a.feature) 

%// 1  2  3  4 
%// 5  6  7  8 
%// 9 10 11 12 

Это функционально эквивалентно:

features = cat(1, a(1).feature, a(2).feature, a(3).feature, ..., a(end).feature); 
Смежные вопросы