Number of Islands – 2Dアレイの隣接要素のカウント(フィーチャー数)

Number of Islands – LeetCode

2Dアレイの話なので、イメージ処理の話として考えると、
0は背景、0以外は何かしらの物体という形で、
画像内のフィーチャーをカウントするという話として考える事ができる。
従って、scipy.ndimage.labelを用いるのがリーズナブルチョイス。

import numpy as np
from scipy.ndimage import label


def count_labels(a):
    a = np.asarray(a)
    return label(a)[1]


s1 = """11110
11010
11000
00000"""
s2 = """11000
11000
00100
00011"""
slst = [s1, s2]
lst = [[[int(x) for x in line] for line in s.splitlines()] for s in slst]

res = [count_labels(x) for x in lst]
print(res)
[1, 3]

ゼロも含めて隣接要素のカウントがしたい場合は、関連同様にして、

def count_labels_with_zero(a):
    a = np.asarray(a)
    val = np.unique(a.ravel())
    labels = label(a==val[:, None, None])[0].sum(0)
    return len(np.unique(labels))


res2 = [count_labels_with_zero(x) for x in lst]
print(res2)
[2, 5]

 
 

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

カテゴリー: 未分類 パーマリンク

Number of Islands – 2Dアレイの隣接要素のカウント(フィーチャー数) への1件のフィードバック

  1. ピンバック: 2次元配列で同じ値を持つ隣接要素を見つける – 配列内のフィーチャにラベル付け(Flood fill) | 粉末@それは風のように (日記)

コメントを残す

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

WordPress.com ロゴ

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

Google フォト

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

Twitter 画像

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

Facebook の写真

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

%s と連携中

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