質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
NumPy

NumPyはPythonのプログラミング言語の科学的と数学的なコンピューティングに関する拡張モジュールです。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

Q&A

解決済

3回答

851閲覧

NumPyにて特定の要素と接する(輪郭)要素の値を変更したい

waiw

総合スコア3

NumPy

NumPyはPythonのプログラミング言語の科学的と数学的なコンピューティングに関する拡張モジュールです。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

0グッド

1クリップ

投稿2021/01/17 20:32

np.arrayにて0,1のみで生成された6*6の配列

input

1[[ 0 0 0 0 0 0] 2 [ 0 1 0 0 0 0] 3 [ 0 0 0 0 0 0] 4 [ 0 0 0 0 0 0] 5 [ 0 0 0 0 0 0] 6 [ 0 0 0 0 0 1]]

output

1[[ 1 1 1 0 0 0] 2 [ 1 1 1 0 0 0] 3 [ 1 1 1 0 0 0] 4 [ 0 0 0 0 0 0] 5 [ 0 0 0 0 1 1] 6 [ 0 0 0 0 1 1]]

のように1の要素の輪郭に対して1とを出力したいです。

毎度毎度indexを指定して出力する必要があるのでしょうか、
また関数が用意されていたりするのでしょうか。

ご教授いただければ幸いです、よろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

ベストアンサー

scipy.ndimage.binary_dilation()を用いましょう。
scipy.ndimage.binary_dilation — SciPy Reference Guide

python

1import numpy as np 2from scipy.ndimage import binary_dilation 3 4a = np.array([[0, 0, 0, 0, 0, 0], 5 [0, 1, 0, 0, 0, 0], 6 [0, 0, 0, 0, 0, 0], 7 [0, 0, 0, 0, 0, 0], 8 [0, 0, 0, 0, 0, 0], 9 [0, 0, 0, 0, 0, 1]]) 10 11s = np.ones((3, 3), dtype=bool) 12 13binary_dilation(a, s) 14# [[ True True True False False False] 15# [ True True True False False False] 16# [ True True True False False False] 17# [False False False False False False] 18# [False False False False True True] 19# [False False False False True True]] 20 21binary_dilation(a, s).view(np.int8) 22# [[1 1 1 0 0 0] 23# [1 1 1 0 0 0] 24# [1 1 1 0 0 0] 25# [0 0 0 0 0 0] 26# [0 0 0 0 1 1] 27# [0 0 0 0 1 1]]

投稿2021/01/18 00:49

編集2021/01/25 01:27
kirara0048

総合スコア1399

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

サイズが3x3で要素が全部1の配列と畳み込みをしてから、0以外の要素を全部1にしてしまえばいいと思います

python

1import numpy as np 2from scipy import signal 3 4a = np.array([[0, 0, 0, 0, 0, 0], 5 [0, 1, 0, 0, 0, 0], 6 [0, 0, 0, 0, 0, 0], 7 [0, 0, 0, 0, 0, 0], 8 [0, 0, 0, 0, 0, 0], 9 [0, 0, 0, 0, 0, 1]]) 10 11b = np.ones((3, 3), dtype=np.uint8) 12 13c = signal.convolve2d(a, b, mode="same") 14c[c>0] = 1 15 16print(a) 17#print(b) 18print(c)

投稿2021/01/17 23:54

編集2021/01/18 00:27
jbpb0

総合スコア7653

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

こういう方法で一応出来ます。

python

1>>> import numpy as np 2>>> a = np.array([[0, 0, 0, 0, 0, 0], 3... [0, 1, 0, 0, 0, 0], 4... [0, 0, 0, 0, 0, 0], 5... [0, 0, 0, 0, 0, 0], 6... [0, 0, 0, 0, 0, 0], 7... [0, 0, 0, 0, 0, 1]]) 8>>> 9>>> size = a.shape[0] 10>>> a[1:, :] |= a[:size-1, :] 11>>> a[:size-1, :] |= a[1:, :] 12>>> a[:, :size-1] |= a[:, 1:] 13>>> a[:, 1:] |= a[:, :size-1] 14>>> print(a) 15[[1 1 1 0 0 0] 16 [1 1 1 0 0 0] 17 [1 1 1 0 0 0] 18 [0 0 0 0 0 0] 19 [0 0 0 0 1 1] 20 [0 0 0 0 1 1]]

投稿2021/01/17 22:37

ppaul

総合スコア24670

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問