如何使用Arrayfun,Matlab应用Cellfun向量?

时间:2016-03-31 19:35:58

标签: arrays matlab

我正在扩展线程的arrayfun code 在Matlab中查找带有变换的双序列?以获取cellfun中的向量列表({{ 1}})。 伪代码

DD

预期输出

DD = {[9 1 5 6 6 6 5 1 1 0 7 7 7 7 7 8], [1 1 1 4], [7 7 7]};

d = cellfun(@(i) diff(diff([0 i 0]) == 0), DD, 'Uniform', false);
y = cellfun(@(z) ...
    arrayfun(@(i,j) DD{i}(i:j), find(z>0), find(z<0), 'Uniform', false), ...
    d, 'Uniform', false););

错误

y = { {[6 6 6], [1 1], [7 7 7]}, ...
      {[1 1 1]}, ...
      {[7 7 7]} };

评论

  • Index exceeds matrix dimensions. Error in findDoubleSequenceAnonFunction>@(i,j)DD{i}(i:j) Error in findDoubleSequenceAnonFunction>@(z)arrayfun(@(i,j)DD{i}(i:j),find(z>0),find(z<0),'Uniform',false) Error in findDoubleSequenceAnonFunction (line 5) y = cellfun(@(z) ... 。我在d = cellfun(...中应用了diff(diff(...函数。应该没问题。
  • cellfun。这里需要y = cellfun(...因为cellfun中有一个向量单元格。不知何故,cellfun-arrayfun变得复杂。

你怎么能在这里使用cellfun-arrayfun组合?

1 个答案:

答案 0 :(得分:4)

只需使用for循环,便于阅读:

XX = {[9 1 5 6 6 6 5 1 1 0 7 7 7 7 7 8], [1 1 1 4], [7 7 7]};

YY = cell(size(XX));
for i=1:numel(XX)
    x = XX{i};
    d = diff(diff([0 x 0]) == 0);
    YY{i} = arrayfun(@(i,j) x(i:j), find(d>0), find(d<0), 'Uniform',false);
end

结果:

>> celldisp(YY)

YY{1}{1} =
     6     6     6
YY{1}{2} =
     1     1
YY{1}{3} =
     7     7     7     7     7

YY{2}{1} =
     1     1     1

YY{3}{1} =
     7     7     7