Merge 3D matrices into one cell array without using a loop
Ältere Kommentare anzeigen
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!
Akzeptierte Antwort
Weitere Antworten (1)
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.
Kategorien
Mehr zu Resizing and Reshaping Matrices finden Sie in Hilfe-Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!