【问题标题】:How to Apply Cellfun Vectors with Arrayfun, Matlab?如何使用 Arrayfun、Matlab 应用 Cellfun 向量?
【发布时间】:2016-03-31 19:35:58
【问题描述】:

我正在扩展线程的arrayfuncode To Find Double Sequence With Transforms in Matlab? 以获取cellfun (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(...。我在cellfun 中应用函数diff(diff(...。应该没问题。
  • y = cellfun(...。这里需要有cellfun,因为在d 中还有一个向量单元。不知何故,cellfun-arrayfun 变得复杂了。

这里怎么能有 cellfun-arrayfun 组合?

【问题讨论】:

  • 有时最好使用 for 循环,可读性更强。
  • 为什么要将三个输入传递给arrayfun?你的匿名函数只需要 2。似乎你的 d 是在错误的位置
  • @Amro 何时决定使用哪个?
  • 当你无法理解自己的代码时
  • @Suever 谢谢!这是一个错误。我更新了正文。

标签: arrays matlab


【解决方案1】:

只需使用 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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-28
    • 2018-07-08
    • 2012-11-16
    • 1970-01-01
    • 2013-05-10
    • 1970-01-01
    相关资源
    最近更新 更多