Assigning multiple variables vectors from a cell array

조회 수: 18 (최근 30일)
Johannes Berger
Johannes Berger 2017년 12월 13일
편집: Jan 2017년 12월 14일
I'm wondering if there is any smart solution on how to access multiple same-sized vectors inside of a cell array and assign them to an independent variable.
cellArray =
1×4 cell array
{1×101 double} {1×101 double} {1×101 double} {1×101 double}
Thanks!

채택된 답변

Honglei Chen
Honglei Chen 2017년 12월 13일
편집: Honglei Chen 2017년 12월 13일
I would just do the following and then access them using 3rd indices
reshape(cell2mat(cellArray),[size(cellArray{1}) length(cellArray)])
HTH
  댓글 수: 2
Johannes Berger
Johannes Berger 2017년 12월 13일
Thank you! Exactly what I was looking for.
Jos (10584)
Jos (10584) 2017년 12월 13일
Simple
cat(3, cellArray{:})
would do ...

댓글을 달려면 로그인하십시오.

추가 답변 (2개)

Adam
Adam 2017년 12월 13일
[a1, a2, a3, a4] = cellArray{:};
It is not advisable generally to do this, but for the record, that syntax should work. Having 1 variable is almost always a lot better than 4.
  댓글 수: 2
Johannes Berger
Johannes Berger 2017년 12월 13일
Thank you, this solution does work, although one would have to look for a way to dynamically create as much variables as needed since the number of vectors in the cell array varies.
Stephen23
Stephen23 2017년 12월 14일
편집: Stephen23 2017년 12월 14일
"...although one would have to look for a way to dynamically create as much variables as needed since the number of vectors in the cell array varies."
No, that is exactly what one should avoid doing. Magically creating or accessing variables will make your code slow, complex, buggy, obfuscated, hard to debug, and insecure. Read this to know why:
Adam already told you a much better solution, which is to keep your data in one array.

댓글을 달려면 로그인하십시오.


Jan
Jan 2017년 12월 13일
편집: Jan 2017년 12월 13일
Do you mean:
a = cellArray{1}{1};
b = cellArray{2}{1};
c = cellArray{3}{1};
d = cellArray{4}{1};
Now a,b,c,d are 1x101 vectors.
  댓글 수: 3
Stephen23
Stephen23 2017년 12월 14일
"...but this does not automatically match the varying number of vectors in the cell array."
Magically creating variables would be slow, complex, inefficient, hard to debug, and insecure. Using indexing is simple, neat, easy to debug, and very efficient.
Jan
Jan 2017년 12월 14일
편집: Jan 2017년 12월 14일
@Johannes: Your question looks, like you have a nested cell:
cellArray =
1×4 cell array
{1×101 double} {1×101 double} {1×101 double} {1×101 double}
Therefore I've added the {k}{1}. As Stephen has pointed out: Such an automagical creation of variables is a bad programming pattern, which is known to cause more troubles than it solves.

댓글을 달려면 로그인하십시오.

카테고리

Help CenterFile Exchange에서 Performance and Memory에 대해 자세히 알아보기

Community Treasure Hunt

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

Start Hunting!

Translated by