Merge 3D matrices into one cell array without using a loop
3 次查看(过去 30 天)
显示 更早的评论
I have three 3D matrices (mxnxt) that I would like to merge into a single array of mxn with each array holding the corresponding data from the original matrices. Thus {1,1} of the new array will have a tx3 matrix containing the data.
For instance, A, B and C are 10x10x300 matrices. How do I make D to be a 10x10 array where {1,1} is a 300x3 matrix, without using a loop, but simple vector indexing.
Hope this makes sense!
0 个评论
采纳的回答
Stephen23
2015-6-24
编辑:Stephen23
2015-6-24
Try this:
A = rand(10,10,300);
B = rand(10,10,300);
C = rand(10,10,300);
D = permute(cat(4,A,B,C),[3,4,1,2]); % join together, re-orient
V = ones(1,10);
D = squeeze(mat2cell(D,300,3,V,V)); % split into cell
And the output:
>> size(D)
ans =
10 10
>> size(D{1,1})
ans =
300 3
4 个评论
Stephen23
2015-6-25
编辑:Stephen23
2015-6-25
There are basically three ways of dealing with Big Data:
- Change the algorithm so that it is not necessary to hold all of the data in memory.
- Use tools designed to operate on Big Data.
- Buy lots more memory.
Do an [internet search engine] search for "MATLAB Big Data" and you will find lots of discussions on these topics. Well, mostly on the first two, but the third gets mentioned too!
更多回答(1 个)
Matt J
2015-6-25
编辑:Matt J
2015-6-25
There is no way to do it without for-loops. Note that mat2cell and friends are all mfiles that use loops internally.
The data organization you are pursuing is ill-advised. Instead of cell arrays, you should just cat() them into a 4D numeric array
D=cat(4,A,B,C);
Now to access a tx3 sub-array, you can do things like
squeeze(D(i,j,:,:))
It would have been much better and cleaner if you had instead made the original arrays tx1xmxn. That way, you could concatenate as
cat(2,A,B,C)
and your sub-arrays would be in more efficient memory-contiguous blocks and also more simply indexed as D(:,:,i,j). You can use permute() to achieve this, of course, but permute() is an expensive operation.
0 个评论
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Matrices and Arrays 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!