1X1500 cell array to matrix
古いコメントを表示
I have 1500 .txt files containing 5 columns and 71022 rows. I converted them into 1x1500 cell array using import tool. Now the new table data has 1500 tables, each having 5 columns and 71022 rows. I want to have a 3-D matrix. How do I do that?
回答 (2 件)
Adam Danz
2019 年 1 月 24 日
Since each matrix is the same size, here's an easy solution: If your cell array is named 'ca', 'm' will be your 3D array.
m = reshape(cell2mat(ca), 71022, 5, 1500);
How this works:
cell2mat() converts your 1x1500 cell into a 71022x(1500*5) matrix.
reshape() converts that matrix into a 3D array with 71022 rows, 5 columns, and 1500 pages.
12 件のコメント
Arup Bhattacharya
2019 年 1 月 24 日
Adam Danz
2019 年 1 月 24 日
If the number of rows differ between the elements of the cell array, you cannot put them into a 3D array. One way around this is to pad the shorter matricies with NaN values (or 0s or something like that) so that all cell elements have the same number of rows. I could help you with that solution if that's what you decide to do. But I urge you to keep the data stored in the cell array since it will be easier to work with.
Arup Bhattacharya
2019 年 1 月 24 日
Continuing from my example above were 'ca' is the cell array of matricies with the same number of columns but varying number of rows,
% get number of rows in each element
nrows = cellfun(@(x)size(x,1), ca, 'UniformOutput', false);
maxRows = max([nrows{:}]);
% Pad each matrix with rows of trailing NaNs
caPad = cellfun(@(x)padarray(x, [maxRows-size(x,1), 0], NaN, 'post'), ca, 'UniformOutput', false);
% Now reshape (same as in my example)
m = reshape(cell2mat(caPad), maxRows, 5, 1500);
Arup Bhattacharya
2019 年 1 月 24 日
Arup Bhattacharya
2019 年 1 月 24 日
編集済み: Arup Bhattacharya
2019 年 1 月 24 日
Adam Danz
2019 年 1 月 25 日
That's exactly what my solution does. I just wanted to confirm that your data were indeed matricies stored in a cell array. But you keep using the word table. Could you attach a mat file that contains your variable 'door1'?
Arup Bhattacharya
2019 年 1 月 25 日
Image Analyst
2019 年 1 月 25 日
Maybe there is a better way, like csvread(), importdata(), readtable(), textscan(), etc. where you don't have to mess with the complication of cell arrays.
Someone could probably tell you if you attach your text file.
Adam Danz
2019 年 1 月 25 日
My solution works when your variable is a cell array and each element of the cell array is a matrix. I'll need to look at your variable to help further. You could save your variable to a mat file and upload it here.
Bob Thompson
2019 年 1 月 24 日
0 投票
You can try using cell2mat(), but I'm not intimately familiar with it enough to know if it will work with arrays inside each cell, or if you need to just have doubles.
Alternatively, you can always just use a loop:
for i = 1:size(cellarray,2)
3dmatrix(:,:,i) = cellarray{i};
end
カテゴリ
ヘルプ センター および File Exchange で Data Type Conversion についてさらに検索
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!