2D配列(numpy.ndarray)の隣接要素をグループ化(クラスタ化)

過去のエントリを見返して,ああこれ凄く単純だったなと思ったのでメモ.

2D配列(numpy.ndarray)の隣接要素をグループ化

import numpy as np
from scipy.ndimage import label
 
a = np.array(
    [
        [12,12,14,14,11,11],
        [10,10,11,11,11,11],
        [10,14,14,10,11,13],
        [12,12,14,13,13,13]
    ]
)
 
values = np.unique(a.ravel())
offset = 0
result = np.zeros_like(a)
for v in values:
  labeled, num_features = label(a == v)
  result += labeled + offset*(labeled > 0)
  offset += num_features
print(result)
[[4 4 7 7 3 3]
 [1 1 3 3 3 3]
 [1 8 8 2 3 6]
 [5 5 8 6 6 6]]

これは,単純にブロードキャストを活用すれば良いだけの話だった.

import numpy as np
from scipy.ndimage import label
 
a = np.array(
    [
        [12,12,14,14,11,11],
        [10,10,11,11,11,11],
        [10,14,14,10,11,13],
        [12,12,14,13,13,13]
    ]
)
 
values = np.unique(a.ravel())
label(a==values[:, None, None])[0].sum(0)
array([[4, 4, 7, 7, 3, 3],
       [1, 1, 3, 3, 3, 3],
       [1, 8, 8, 2, 3, 6],
       [5, 5, 8, 6, 6, 6]])
広告
カテゴリー: 未分類 パーマリンク

2D配列(numpy.ndarray)の隣接要素をグループ化(クラスタ化) への3件のフィードバック

  1. ピンバック: Number of Islands – 2Dアレイの隣接要素のカウント(フィーチャー数) | 粉末@それは風のように (日記)

  2. ピンバック: 隣接カウント | 粉末@それは風のように (日記)

  3. ピンバック: 隣接セルの合計(コンボリューション) | 粉末@それは風のように (日記)

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト /  変更 )

Google フォト

Google アカウントを使ってコメントしています。 ログアウト /  変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト /  変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト /  変更 )

%s と連携中

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください