鉴于以下代码:
% Generate some random data
n = 10;
A = cell(n, 1);
for i=1:n
A{i} = timeseries;
A{i}.Data = rand(100, 1);
A{i}.Time = 1:100;
end
我想在不明确编写Data(end)
循环的情况下使for
之和。是否有一种智能方法可以在一行中的所有单元格中选择Data(end)
? A{:}.Data(end)
不起作用。
答案 0 :(得分:4)
你可以用cellfun
来做,但这实际上只是一个for循环包裹起来:
cellfun(@(x) x.Data(end), A)
答案 1 :(得分:1)
我更喜欢Dan's answer,但作为参考,我会使用arrayfun
发布替代方案。这也只是一个用于保存击键的for循环,但不一定是时间。
sum(arrayfun(@(n) A{n}.Data(end), 1:numel(A)))
答案 2 :(得分:1)
您还可以将所有Data
字段提取到单个矩阵中,如果您计划对其执行多项操作,这可能是值得的:
A2 = [A{:}];
A3 = [A2.Data];
sum(A3(end,:))