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
なりません (要素数が数千以下)。コードの明快さと優雅さを求めています。
これ以上何もできない場合は、これを小さなヘルパー関数に入れるだけで、見る必要がなくなります。