1. ホーム
  2. python

[解決済み] NumPyの配列で、連続した要素のグループを見つける方法

2023-05-20 16:49:29

質問

NumPyの配列から連続した要素をクラスタリングする必要があります。次の例を考えてみましょう。

a = [ 0, 47, 48, 49, 50, 97, 98, 99]

出力は以下のようなタプルのリストである必要があります。

[(0), (47, 48, 49, 50), (97, 98, 99)]

ここでは、要素間の差は1つだけです。差分を制限値やハードコードされた数値で指定することも可能であれば最高です。

どのように解決するのですか?

ここに、役に立つかもしれない小さな関数があります。

def group_consecutives(vals, step=1):
    """Return list of consecutive lists of numbers from vals (number list)."""
    run = []
    result = [run]
    expect = None
    for v in vals:
        if (v == expect) or (expect is None):
            run.append(v)
        else:
            run = [v]
            result.append(run)
        expect = v + step
    return result

>>> group_consecutives(a)
[[0], [47, 48, 49, 50], [97, 98, 99]]
>>> group_consecutives(a, step=47)
[[0, 47], [48], [49], [50, 97], [98], [99]]

P.S. これは純粋なPythonです。NumPyの解決策については、unutbuの答えを参照してください。