How to create vectors from a cell array?

I have a cell array consisting of 3 cells (1x10, 1x15, 1x20). How can I efficiently create 3 vectors?

1 Kommentar

Stephen23
Stephen23 am 3 Jul. 2017
Bearbeitet: Stephen23 am 3 Jul. 2017
@Yerzhigit Bapin: why can't you simply keep the data in the cell array and use indexing? Using indexing is much simpler and more efficient than creating/access variable names dynamically:

Melden Sie sich an, um zu kommentieren.

Antworten (2)

Adam
Adam am 3 Jul. 2017
Bearbeitet: Adam am 3 Jul. 2017

2 Stimmen

[a,b,c] = myCell{:};
Not advisable if the number of vectors you want to create escalates to the state that you are next going to ask how you name then a1, a2, a3, etc, but for just extracting an explicit number of outputs the above should work.

5 Kommentare

Yerzhigit Bapin
Yerzhigit Bapin am 3 Jul. 2017
Thanks, that's actually was my concern, I'd like my code to be so that I don't need to include vectors manually.
Adam
Adam am 3 Jul. 2017
If you do have a variable number of vectors then just keep them in a cell array and access them by index. Or put them into a struct if you really want, with individually named fields.
The latter approach works best where the vectors each relate to something with a meaningful name though rather than stuff you just end up naming a1, a2, a3. e.g. time, velocity, temperature, etc work fine for having independent vectors on a struct, but just arbitrary runs of data work better in a cell array.
ok, so this is what I have so far:
cv = cell(length(P_max),1) ;
for i = 1:length(P_max)
cv{i} = ones(1,P_max(i)) ;
end
I need to create the cumulative sum of all elements of each cell. What I've tried so far creates only one vector.
Stephen23
Stephen23 am 3 Jul. 2017
Bearbeitet: Stephen23 am 3 Jul. 2017
cellfun(@cumsum,C,'uni',0)
where C is your input cell array.
Yerzhigit Bapin
Yerzhigit Bapin am 3 Jul. 2017
Thanks, it works!

Melden Sie sich an, um zu kommentieren.

Image Analyst
Image Analyst am 3 Jul. 2017

1 Stimme

Use deal():
% Setup: Make cell array consisting of 3 cells (1x10, 1x15, 1x20).
ca = {ones(1,10), rand(1,15), randi(9, 1, 20)}
celldisp(ca); % Display it.
% Make vectors
[v1, v2, v3] = deal(ca{:})
or simply assign the 3 vectors
v1 = ca{1};
v2 = ca{2};
v3 = ca{3};

Gefragt:

am 3 Jul. 2017

Kommentiert:

am 3 Jul. 2017

Community Treasure Hunt

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

Start Hunting!

Translated by