[解決済み] 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の答えを参照してください。
関連
-
[解決済み] NumPyの配列を切り詰めずに、完全に表示するにはどうしたらよいですか?
-
[解決済み] Pythonで現在時刻を取得する方法
-
[解決済み] リストの最後の要素を取得する方法
-
[解決済み] リストの要素数を取得する方法
-
[解決済み] NumPyでユークリッド距離はどのように計算できますか?
-
[解決済み] numpy.arrayの形状(R, 1)と(R,)の違いについて
-
[解決済み] Pandasのデータフレームでタプルの列を分割するにはどうしたらいいですか?
-
[解決済み] Pythonのargparseを使った隠し引数の作成
-
[解決済み] 文字列のリストを内容に基づいてフィルタリングする
-
[解決済み] Pythonでマルチプロセッシングキューを使うには?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] DataFrameの文字列、dtypeがobjectの場合
-
[解決済み] Flaskで1時間ごとに関数を実行するようにスケジュールするには?
-
[解決済み] バブルソートの宿題
-
[解決済み] Spyderを仮想環境で動作させるには?
-
[解決済み] 小数点以下1桁を取得する[重複]。
-
[解決済み] Django Rest Framework ファイルアップロード
-
[解決済み] 古いバージョンのPythonにおける辞書のキーの並び順
-
[解決済み] Django 1.7で初期マイグレーションからマイグレートバックする方法は?
-
[解決済み] Django filter queryset __in for *every* item in list
-
[解決済み] リスト内の連続した数のグループを識別する