2017-09-15 7 views
-2

行列を含む1x324セル配列を2次元行列に変換する簡単な方法を見つけたいと思います。行列を含むセルを2次元行列に変換する

セル配列の各要素は、サイズが27x94の行列であるため、2538の異なる値が含まれています。この行列のセル配列を324x2538行列に変換したい - 出力の行には、セル配列の各行(行ベクトルとして)が含まれています。


は私のデータがどのように見えると私は作成しようとしているものを、この例を参照してください何を明確にする:

私が取得しようとしています何
matrix1 = [1,2,3,4,...,94 ; 95,96,97,... ; 2445,2446,2447,...,2538]; % (27x94 matrix) 
% ... other matrices are similar 
A = {matrix1, matrix2, matrix3, ..., matrix324}; % Matrices are in 1st row of cell array 

% 324x2538 output matrix 
B = [1  , 2 , ..., 2538 ; % matrix1 
    2539 , 2540, ..., 5076 ; % matrix2 
    ... 
    819775, 819776, ..., 822312]; 
+2

あなたの[データ型](http://uk.mathworks.com/help/matlab/data-types_data-types.html)を学ぶしてください、この質問の元の言葉遣いは、それは非常に混乱しました!行列には数値データしか含めることができないため、セルを含む行列を持つことはできません。私はあなたの質問を編集して、将来の訪問者にはっきりさせるようにしました。なぜなら、あなたは明確に答えていないからですが、最初は曖昧にならないようにしています。 – Wolfie

答えて

3

cell2mat関数はそれを正確に行います。ドキュメントの例:

C = {[1], [2 3 4]; 
    [5; 9], [6 7 8; 10 11 12]}; 
A = cell2mat(C) 
A = 

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

あなたは今、あなたの行列を持って、これだけの行が含まれているために、それを手直し:

B = rand(27,302456); % your B 
D = reshape(B,27,94,324); % stack your matrices to 3D 
E = reshape(D,1, 2538,324); % reshape each slice to a row vector 
E = permute(E,[3 2 1]); % permute the dimensions to the correct order 
% Based on sizes instead of fixed numbers 
% D = reshape(B, [size(A{1}) numel(A)]); 
% E = reshape(D,[1 prod(size(A{1})) numel(A)]); 
% E = permute(E,[3 2 1]); % permute the dimensions to the correct order 

それとも、あなたのBから1行にそれをする:

B = reshape(B,prod(size(A{1})),numel(A)).' 
+0

私はそれを試みましたが、それは27x30456の行列を作成し、私が必要とするのは324x2538行列を作成することです。 –

0

解決策が見つかりました。将来誰かに同様の問題がある場合は、ここに追加します:

0

これを書き込む1つの方法は、cellfunを使用してセルの各要素を操作し、その結果を連結することです。

% Using your input cell array A, turn all matrices into column vectors 
% You need shiftdim so that the result is e.g. [1 2 3 4] not [1 3 2 4] for [1 2; 3 4] 
B = cellfun(@(r) reshape(shiftdim(r,1),[],1), A, 'uniformoutput', false); 
% Stack all columns vectors together then transpose 
B = [B{:}].'; 
関連する問題