我想在 MATLAB 的逻辑数组中找到所有系列的 1 和 0 的长度。这就是我所做的:
A = logical([0 0 0 1 1 1 1 0 1 1 0 0 0 0 0 0 1 1 1 1 1]);
%// Find series of ones:
csA = cumsum(A);
csOnes = csA(diff([A 0]) == -1);
seriesOnes = [csOnes(1) diff(csOnes)];
%// Find series of zeros (same way, using ~A)
csNegA = sumsum(~A);
csZeros = csNegA(diff([~A 0]) == -1);
seriesZeros = [csZeros(1) diff(csZeros)];
这有效,并给出seriesOnes = [4 2 5]
and seriesZeros = [3 1 6]
。然而,在我看来它是相当丑陋的。
我想知道是否有更好的方法来做到这一点。性能不是问题,因为它很便宜(A
不超过几千个元素)。我正在寻找代码清晰和优雅。
如果没有更好的办法,我就把它放在一个小辅助函数中,这样我就不用看它了。