【发布时间】: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 谢谢!这是一个错误。我更新了正文。