Eu tenho uma matriz de classes (vamos chamá-lo a
, tamanho Mx1) que contém uma propriedade (feature
) que contém uma matriz 1xN. Estou tentando obter uma nova matriz que é MxN, que contém linhas de cada um dos feature
propriedade dos objetos. Por exemplo:
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]
então, dada alguma função, a resposta acabaria como:
ans = [1 2 3 4; 5 6 7 8; 9 10 11 12]
Atualmente, eu tenho usado o seguinte:
ans = cell2mat({a.feature}")
no entanto, sinto que deve haver uma maneira de fazer issosem precisar converter para uma célula, alterne as dimensões e depois converta para uma matriz. Estou correto ou essa seria a melhor maneira de resolver o problema? Não consegui encontrar nenhuma função na documentação.
Respostas:
1 para resposta № 1Quando você tem uma matriz de objetos e acessa uma propriedade usando a referência de pontos, um lista separada por vírgula é retornado. Esta lista separada por vírgula pode ser passado para uma função e aparecerá como vários argumentos de entrada.
No seu caso, você pode passar essa lista separada por vírgula para cat
e especifique que você deseja que cada valor seja concatenado para o próximo na primeira dimensão. Então, isso simplesmente se tornaria:
features = cat(1, a.feature)
%// 1 2 3 4
%// 5 6 7 8
%// 9 10 11 12
Isso é funcionalmente equivalente a:
features = cat(1, a(1).feature, a(2).feature, a(3).feature, ..., a(end).feature);