How do i get multiple values all at once from cell array?
41 次查看(过去 30 天)
显示 更早的评论
Hi,
I have a 7365x60 cell, and there are 1x7 cell in every single block of the big one, like the image shown below:![](https://www.mathworks.com/matlabcentral/answers/uploaded_files/1049770/image.png)
![](https://www.mathworks.com/matlabcentral/answers/uploaded_files/1049770/image.png)
here is the question, how can i get the second value from the 1x7 cell all at once without using cellfun and for loop(cause they are slow), for example, i want to get f from the Trajectory_Data (has 7365x60 cell) which is shown below, but when i run the code below, i got the error:"Expected one output from a curly brace or dot indexing expression, but there were 7365 results.",i dont know how to get all the second value from the cell (there would be 7365x60 = 441900 values in total),can anyone help me?
f = Trajectory_Data{:,1}{:,2}
0 个评论
回答(3 个)
Walter Roberson
2022-6-29
Your options:
- loop
- cellfun
- arrayfun (effectively the same as cellfun)
- cell2mat to form a 3d array, and then index; this is very likely going to be slower than cellfun
- cat() the contents of the cell together along some dimension, process the results, and reshape() afterwards; this is very likely going to be slower than cellfun
Stephen23
2022-6-29
编辑:Stephen23
2022-6-29
"... for loop(cause they are slow)"
A well-written loop will be fast enough, e.g. where C is your cell array and assuming that the nested cells contain scalar numerics:
M = nan(size(C));
for k = 1:numel(C)
M(k) = C{k}{2};
end
Better data design would store such regular data in one numeric array, which would make this task trivial and fast.
3 个评论
另请参阅
类别
在 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!