隣接セルの合計(コンボリューション)

Sum of the cells around a single cell in a matrix with python – StackOverflow

隣接セルの足し合わせは要はコンボリューション.
元の配列が0/1なので,それをインデックスにすれば期待する出力になりそう.

import numpy as np
from scipy import signal

arr = np.array(
    [
        [0, 0, 0, 0, 0, 1, 1, 0, 0, 0],
        [0, 0, 0, 0, 0, 1, 1, 0, 0, 0],
        [1, 1, 1, 0, 1, 1, 0, 1, 0, 0],
        [0, 0, 1, 1, 1, 1, 0, 1, 0, 0],
        [0, 0, 1, 1, 1, 1, 1, 0, 0, 0],
        [0, 0, 0, 0, 1, 0, 0, 0, 0, 0]
    ]
)

kernel = np.ones((3, 3), dtype=np.int8)
np.where(arr, signal.convolve(arr, kernel, 'same'), 0)

array([[0, 0, 0, 0, 0, 4, 4, 0, 0, 0],
[0, 0, 0, 0, 0, 6, 6, 0, 0, 0],
[2, 4, 4, 0, 6, 6, 0, 3, 0, 0],
[0, 0, 6, 8, 8, 7, 0, 3, 0, 0],
[0, 0, 4, 7, 7, 6, 4, 0, 0, 0],
[0, 0, 0, 0, 4, 0, 0, 0, 0, 0]])

10×10にするのも簡単.

kernel = np.ones((10, 10), dtype=np.int8)
np.where(arr, signal.convolve(arr, kernel, 'same'), 0)

array([[ 0, 0, 0, 0, 0, 20, 19, 0, 0, 0],
[ 0, 0, 0, 0, 0, 21, 20, 0, 0, 0],
[11, 16, 19, 0, 21, 21, 0, 19, 0, 0],
[ 0, 0, 19, 21, 21, 21, 0, 19, 0, 0],
[ 0, 0, 19, 21, 21, 21, 20, 0, 0, 0],
[ 0, 0, 0, 0, 21, 0, 0, 0, 0, 0]])

 
 
関連:
すべての隣接セルの値を足し合わせる

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

隣接セルの合計(コンボリューション) への2件のフィードバック

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

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

コメントを残す

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

WordPress.com ロゴ

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

Google フォト

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

Twitter 画像

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

Facebook の写真

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

%s と連携中