過去のエントリを見返して,ああこれ凄く単純だったなと思ったのでメモ.
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]])
ピンバック: Number of Islands – 2Dアレイの隣接要素のカウント(フィーチャー数) | 粉末@それは風のように (日記)
ピンバック: 隣接カウント | 粉末@それは風のように (日記)
ピンバック: 隣接セルの合計(コンボリューション) | 粉末@それは風のように (日記)
ピンバック: 2次元配列で同じ値を持つ隣接要素を見つける – 配列内のフィーチャにラベル付け(Flood fill) | 粉末@それは風のように (日記)