anyway to cat specific column using horzcat?
    6 ビュー (過去 30 日間)
  
       古いコメントを表示
    
Hi:
    I have a cell array, the size is not determined, but each array is a 1000*3 matrix.
    I want to merge the 3rd column of each array into a new matrix, is there anyway to do it?
    below are what I have tried:
    A{1}=rand(1000,3);
    A{2}=rand(1000,3);
    A{3}=rand(1000,3);
   result= horzcat(A{:}(:,3))
    or result= [A{:}(:,3)];
    but Matlab reported error: Expected one output from a curly brace or dot indexing expression, but there were 3 results.
Thanks!
Yu
1 件のコメント
  Rik
      
      
 2019 年 9 月 2 日
				As far as I'm aware, there is currently no way to do this directly in Matlab.
What you could do in this specific case is to cat A to the third dimension, and then select your data from the 3D array.
採用された回答
  Walter Roberson
      
      
 2019 年 9 月 2 日
        res = cell2mat(cellfun(@(x) x(:,3), A, 'uniform', 0));
4 件のコメント
  Guillaume
      
      
 2019 年 9 月 2 日
				your answer works
As I commented in dpb's answer, only if the cell array is a row vector.
  Walter Roberson
      
      
 2019 年 9 月 2 日
				res = cell2mat(cellfun(@(x) x(:,3), A(:).', 'uniform', 0));
This will work even with cell arrays that are column vectors.
その他の回答 (1 件)
  Guillaume
      
      
 2019 年 9 月 2 日
        As others have said, no you can't do that with a single statement.
Assuming a cell array of any shape and size, rik's suggestion is probably the shortest to write:
result = cat(3, yourcellarray{:});
result = squeeze(result(:, 3, :));
The other option is cellfun indeed but without cell2mat if the cell array is not a row vector:
result = cellfun(@(m) m(:, 3), 'UniformOutput', false);
result = [result{:}];
0 件のコメント
参考
カテゴリ
				Help Center および File Exchange で Operators and Elementary Operations についてさらに検索
			
	Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!