How to extract data from all matrixes of a cell array?

I have a cell array 1x23 and every matrix contains 1x921600 and they're all same size but i only need to extract data from all the matrixes from array 1 until 456000 and again from 456000 until 764500. how can i do that ?

 Accepted Answer

For cell array "C"
newArray = cellfun(@(a){{a(1,1:456000);a(1,456000:764500)}},C);
newArray = [newArray{:}];
newArray is a 2xn cell array of row vectors where row 1, newArray(1,:), are the values 1:456000 and row 2, newArray(2,:), are values 456000:764500
newArray =
2×23 cell array
Columns 1 through 3
{1×456000 double} {1×456000 double} {1×456000 double} . . . . .
{1×308501 double} {1×308501 double} {1×308501 double} . . . . .

4 Comments

i got this error
Index in position 2 exceeds array bounds (must not exceed 1).
Error in test1>@(a){{a(1,1:456000);a(1,456000:764500)}}
Error in test1 (line 9)
newArray = cellfun(@(a){{a(1,1:456000);a(1,456000:764500)}},x);
Then the description of the data in your question is incorrect. Namely, "every matrix contains 1 x 921600".
Maybe you meant 921600 x 1 in which case you can change the indexing to
newArray = cellfun(@(a){{a(1:456000,1);a(456000:764500,1)}},C);
or
newArray = cellfun(@(a){{a(1:456000);a(456000:764500)}},C);
On second thought, it looks like you may not have applied the code correctly. Double check that. If you continue to have the problem show the code you applied and also confirm the size of your data.
Thank you so much yes that's exactly what i wanted

Sign in to comment.

More Answers (1)

By extracting data, I assume you mean accessing the elements. This seems more of a syntax question.
Let's say you have a cell array
ca = {[1 2 3], [4 5 6], [7, 8, 9]}
Now, you can just loop over it
for i = 1 : length(ca)
matrix = ca{i}
% you have the matrix in each iteration now, access its elements any way you like
end

5 Comments

@Reeshabh Kumar Ranjan this is not correct, as variable matrix will only save the last cell matrix, i.e. [7,8,9]; Variable matrix should change name within the loop for each iteration to extract all 3 cell matrices
"Variable matrix should change name within the loop for each iteration to extract all 3 cell matrices"
Changing variable names dynamically should be avoided:
Rather than doing that, a much better solution is to use indexing... which means that we don't need to do anything at all, because the input cell array ca can already be easily accessed using indexing.
Nice avatar picture, by the way.
This is partly true. What if you have 100 matrices in a cell array? will you name the individually?
"This is partly true."
Exactly which part is untrue?
"What if you have 100 matrices in a cell array?"
As stated in my previous comment, I would use simple and efficient indexing into the cell array. This is not just a hypothetical situation, I do this very often (e.g. processing TB of data in thousands of files).
"will you name the individually?"
No.

Sign in to comment.

Categories

Tags

Asked:

on 30 Jun 2020

Edited:

on 14 Sep 2022

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!