teratail header banner
teratail header banner
質問するログイン新規登録

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

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

新規登録して質問してみよう
ただいま回答率
85.30%
Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Q&A

解決済

1回答

4354閲覧

convolve2dを使用して畳み込みを行いたい

gantakun

総合スコア16

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

0グッド

0クリップ

投稿2022/05/10 09:49

0

0

実現したいこと

計算の中で,高速化を目的として,
scipyのconvolve2dを利用して二次元配列の畳込みを行いたいのですが,
自分の想定している結果にならず困っています.
以下のコードに現状で作成される二次元配列と目標としている二次元配列を示しています.
作成したいのは,畳込みの結果,境界が0もしくはnanで埋めら二次元配列です.
よろしくお願いいたします.

該当のソースコード

Python

1import numpy as np 2from scipy import signal 3 4 5a = np.array([ 6 [1,2,3,4,5,6], 7 [7,8,9,10,11,12], 8 [13,14,15,16,17,18], 9 [19,20,21,22,23,24], 10 [25,26,27,28,29,30], 11 [31,32,33,34,35,36] 12 ]) 13 14f = np.array([ 15 [0,1,0], 16 [0,0,0], 17 [0,0,0] 18 ]) 19 20p = signal.convolve2d(a, f, mode='same') 21print(p) 22#出力される結果 23#[[ 7 8 9 10 11 12] 24 #[13 14 15 16 17 18] 25 #[19 20 21 22 23 24] 26 #[25 26 27 28 29 30] 27 #[31 32 33 34 35 36] 28 #[0 0 0 0 0 0]] 29 30#出力したい配列(畳み込みの範囲外は0やnanで埋めた配列を作成したい) 31#[[0 0 0 0 0 0] 32 #[0 2 3 4 5 0] 33 #[0 8 9 10 11 0] 34 #[0 14 15 16 17 0] 35 #[0 20 21 22 23 0] 36 #[0 0 0 0 0 0]]

試したこと

modeやboudaryなどの引数を変更してみましたが,
出力したい配列が得られませんでした.

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

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

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

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

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

jbpb0

2022/05/10 11:33

「f」の「1」が入ってる場所を一番上の真ん中から一番下の真ん中に変えて、下記を実行すれば「出力したい配列」になります p = np.zeros_like(a) p[1:-1, 1:-1] = signal.convolve2d(a, f, mode='valid') print(p) ただし、それで > 計算の中で,高速化を目的として, を達成できるのかは、分かりませんけど
gantakun

2022/05/10 12:04

ありがとうございます.参考にさせていただきます.
guest

回答1

0

ベストアンサー

python

1import numpy as np 2from scipy import signal 3 4a = np.array([ 5 [1,2,3,4,5,6], 6 [7,8,9,10,11,12], 7 [13,14,15,16,17,18], 8 [19,20,21,22,23,24], 9 [25,26,27,28,29,30], 10 [31,32,33,34,35,36] 11 ]) 12 13f = np.array([ 14 [0,0,0], 15 [0,0,0], 16 [0,1,0] 17 ]) 18 19p = np.pad(signal.convolve2d(a, f, mode='valid'), 1) 20print(p) 21 22# 23[[ 0 0 0 0 0 0] 24 [ 0 2 3 4 5 0] 25 [ 0 8 9 10 11 0] 26 [ 0 14 15 16 17 0] 27 [ 0 20 21 22 23 0] 28 [ 0 0 0 0 0 0]]

[[ 1 2 3 4 5 6]
[ 7 8 9 10 11 12]
[13 14 15 16 17 18]
[19 20 21 22 23 24]
[25 26 27 28 29 30]
[31 32 33 34 35 36]]

[[0 0 0 0 0 0]
[0 2 3 4 5 0]
[0 8 9 10 11 0]
[0 14 15 16 17 0]
[0 20 21 22 23 0]
[0 0 0 0 0 0]]

投稿2022/05/10 12:01

melian

総合スコア21240

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

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

gantakun

2022/05/10 12:05

回答ありがとうございます. 参考にさせていただきます.
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.30%

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

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

質問する

関連した質問