accessing elements inside cell arrays
    3 ビュー (過去 30 日間)
  
       古いコメントを表示
    
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?
0 件のコメント
採用された回答
  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 件のコメント
その他の回答 (0 件)
参考
カテゴリ
				Help Center および File Exchange で Cell Arrays についてさらに検索
			
	Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!

