我正在扩展线程的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组合?
答案 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