我有一个单元数组(11000x500),它有三种不同类型的元素。1)非零双精度2)零3)空单元格
我想找出所有出现在两个零之间的非零数。
例如,A = {123 13232 132 0 56 0 12 0 0 [] [] []};
我需要以下输出out = logical([0 0 0 0 1 0 1 0 0 0 0 0]);
我像这样使用cellfun和isequal
out = cellfun(@(c)(~isequal(c,0)), A);并得到了以下输出
out = logical([1 1 1 0 1 0 1 0 0 1 1 1]);我需要帮助来执行下一步,我可以忽略连续的1's,只取两个0's之间的‘1’
有没有人能帮我一下?
谢谢!
发布于 2016-09-06 00:59:56
您可以使用conv查找邻居为0的元素(请注意,该~已从isequal中删除):
out = cellfun(@(c)(isequal(c,0)), A); % find 0 elements
out = double(out); % cast to double for conv
% elements that have more than one 0 neighbor
between0 = conv(out, [1 -1 1], 'same') > 1;
between0 =
0 0 0 0 1 0 1 0 0 0 0 0(卷积内核已更正,以修复@TasosPapastylianou发现的错误,其中3个连续的零将导致True。)
如果你想要一个逻辑向量的话。如果需要索引,只需添加find
between0 = find(conv(out, [1 -1 1], 'same') > 1);
between0 =
5 7https://stackoverflow.com/questions/39334577
复制相似问题