cell array or multidimensional array?
조회 수: 11 (최근 30일)
이전 댓글 표시
Which of the two is more MATLAB-friendly?
- Cell Array, or
- Multidimensional Array
If cell arrays are better than multidimensional arrays, how should I define the following array in cell array format:
A(128, 128, 17, 4, 25)
Suppose A is:
A(X, Y, Z, VARS, TIMES)
which means A contains the value of some variables VAR1, VAR2, ..., VARN in a 3D space in different times.
댓글 수: 0
채택된 답변
James Tursa
2011년 5월 19일
Depends on what you are doing with the data downstream. If you are accessing array slices of A a lot, then the cell array approach might be more efficient because it would not involve data copying to access the slices (whereas accessing a slice of an nD array does involve a data copy each time you do it). But if you need to work with the data contiguously downstream then the nD array approach might be more efficient (rather than cat-ing the cell arrays together which would involve a data copy).
댓글 수: 2
Andy
2011년 5월 19일
Perhaps I'm misunderstanding you, but this does not appear to be the case on my machine:
x = rand(100,100);
numruns = 1e5;
rows = 50:60;
cols = 50:60;
tic
for ix=1:numruns
x(rows,cols);
end
toc
x = num2cell(x);
tic
for ix=1:numruns
x(rows,cols); % <- parens
end
toc
tic
for ix=1:numruns
x{rows,cols}; % <- braces
end
toc
Elapsed time is 0.129221 seconds.
Elapsed time is 0.211889 seconds.
Elapsed time is 2.395911 seconds.
Sean de Wolski
2011년 5월 19일
Andy: The data copy is only pulling 121 elements or less than a kilobyte.
The memory required for double matrix of the OP's size:
>> prod([128, 128, 17, 4, 25])*8
ans = 222822400
If copy's of this are necessary then memory copy could become a time sink, especially if the RAM limits of the computer are approached.
추가 답변 (2개)
Andy
2011년 5월 19일
Obviously it depends: is all of your data numeric, or are the data types mixed? If the data is all numeric, then I'd say stick with a numeric array. If it's mixed, use a cell array.
EDIT (more explanation): There are lots of functions designed to manipulate numeric data stored in an array (all of the operators, mathematical functions, etc.). If you store your data in a cell array, you need to convert back to a numeric array every time you need to calculate, say, the mean of your data. I cannot think of any functions that operate on cell arrays of numeric data that don't also operate on numeric arrays of numeric data. Also, cell arrays introduce lots of opportunity for hard to find typos (like typing myCell(1) instead of myCell{1}).
You should use cell arrays only when you really have to. That is when you have data of mixed type or arrays of different sizes. Otherwise, stick with numeric arrays.
Oleg Komarov
2011년 5월 19일
Cell arrays have significant overhead and they are slower wrt do a double nD array but they can mix datatypes.
댓글 수: 0
참고 항목
카테고리
Help Center 및 File Exchange에서 Matrix Indexing에 대해 자세히 알아보기
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!