필터 지우기
필터 지우기

accessing elements inside cell arrays

조회 수: 1 (최근 30일)
PChoppala
PChoppala 2015년 12월 1일
편집: PChoppala 2015년 12월 1일
I am not a great user of cell arrays and haven't found my answer precisely on other links, hence the question. I have a cell array inside a cell array, e.g., as follows,
x{1}={1 2 3};
x{2}={1 2 3};
x{3}={1 2 3};
x{4}={1 2 3};
x{5}={1 2 3};
Now for example I would like to extract the second element in each 1x3 cell array for all the 5 cell arrays, i.e., I would like to obtain a 5x1 vector containing twos. Currently I obtain this by
temp1 = vertcat(x{:});
result = vertcat(temp1{:,2})
Can this be done more effectively and preferably in a single statement?

채택된 답변

Walter Roberson
Walter Roberson 2015년 12월 1일
result = subsref( cell2mat(vertcat(x{:})), struct('type', '()', 'subs', {{':', 2}}) );
This is why we seldom do it on a single line. Much easier is two lines, either of
col2 = @(M) M(:,2);
result = col2( cell2mat(vertcat(x{:})) );
or
temp2 = cell2mat(vertcat(x{:}));
result = temp2(:,2);
The advantage of the first approach is that the "col2" only needs to be defined once, so you can do similar operations with a single line afterwards
getcol = @(M, col) M(:,col);
result1 = getcol( cell2mat(vertcat(x{:})), 2);
result2 = getcol( cell2mat(vertcat(y{:})), 5);

추가 답변 (0개)

카테고리

Help CenterFile Exchange에서 Data Type Conversion에 대해 자세히 알아보기

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by