【发布时间】:2015-05-01 17:47:30
【问题描述】:
我想在 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] 和seriesZeros = [3 1 6]。但是在我看来它是相当丑陋的。
我想知道是否有更好的方法来做到这一点。性能不是问题,因为它很便宜(A 不超过几千个元素)。我正在寻找代码清晰和优雅。
如果没有更好的办法,我就把它放在一个小辅助函数中,这样我就不用看了。
【问题讨论】:
标签: arrays matlab run-length-encoding