How to access/manipulate data from cell arrays?
20 次查看(过去 30 天)
显示 更早的评论
So I have the code bleow which sovles an ODE 1000 times with random variables. The result is a 1000 by 1 cell array, the contents of which are all XX by 2 numeric arrays (column 1 solves x(1), column 2 solves x(2)). What I would like to produce is an XX by 1000 numeric array, where my 1000 columns would be comprised of all column 2 data from the numeric arrays nested in my cell array. Is this possible? I've looked through the Cell Arrays and Multilevel Indexing to Access Parts of Cells pages, and haven't been able to find what I'm looking for. Any help would be appreciated.
n = 1000;
result = cell(n,1);
for k=1:n
tspan=[1 7];A0=rand;P0=rand;g=rand;p=rand;B=rand;
[t,x] = ode45(@(t,x) [-g*x(1) + p*x(1); -x(1)*x(2)+ B*x(2)], tspan, [A0 P0]);
result{k} = x;
end
0 个评论
采纳的回答
Adam Danz
2019-6-3
编辑:Adam Danz
2019-6-3
This extracts column 2 data from all elements of the cell array and arranges it in a row within a cell array as you described.
C = cellfun(@(x)x(:,2),result,'UniformOutput', false)';
Here's how to put that into a padded array
% how much padding is needed per cell?
maxLen = max(cellfun(@(x)size(x,1),result)); %max length
padNum = maxLen - cellfun(@(x)size(x,1),result);
% get the col 2 vals and pad them
C = cellfun(@(x)x(:,2),result,'UniformOutput', false);
Cpad = cellfun(@(x,p)padarray(x,p,NaN,'post'),C,num2cell(padNum),'UniformOutput',false);
% Put them into a matrix
M = cell2mat(Cpad');
4 个评论
Adam Danz
2019-6-3
If they were all the same size, it would be as easy as
C = cellfun(@(x)x(:,2),result,'UniformOutput', false)';
cell2mat(C)
更多回答(1 个)
madhan ravi
2019-6-3
编辑:madhan ravi
2019-6-3
result{k} = x(:,2);
To produce a numeric matrix you need to append with nan or zeros at the end.
M=max(cellfun('prodofsize', result));
Desired=cell2mat(cellfun(@(x) [x;zeros(M-numel(x),1)], result,'un', 0))
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Logical 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!