🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
NumPy

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

Python 3.x

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

Q&A

解決済

1回答

537閲覧

Numpy Python3配列を作る上で高速を考える 2次元配列

goki_gottan

総合スコア168

NumPy

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

Python 3.x

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

0グッド

0クリップ

投稿2021/01/17 16:18

Numpy2次元配列を高速で計算する方法で、
配列同士を計算しつつ、元の同じ通りの2次元Numpy配列で表現したく思います。

Numpy2次元配列をAとし、A=[[10×10]]とします(10列10行)

A[0:2,0:2]、これを、1ブロックとし、1ブロックの平均をとり、ズラしていきます。
例:次は、A[1:2,1:2]こんな感じです。

for a in A行
for b in B行
こんな感じで、2次元を計算していくのですが、
その計算された結果を、またAのような2次元で表現する際、高速で計算する方法は、
1、リスト内表記というものはあるのでしょうか。
2、For文を使用して、1ブロックの平均を仮にFとして、appendで追加していく方法
行が変われば、さらにappendというfor文です。この場合、1ブロックの平均になりますので
行列数は減ります。
※こちら実装しましたが高速なのでしょうか。

もっと良い方法がありましたらご教示いただけないでしょうか。

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

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

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

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

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

kirara0048

2021/01/18 00:58

すみません、 > 例:次は、A[1:2,1:2]こんな感じです。 というのはどういう意味なのでしょう。 現在はどのようなコードを書いているのでしょうか。 最小の完全で検証可能な例( https://ja.stackoverflow.com/help/minimal-reproducible-example )があると回答がつきやすいです。
guest

回答1

0

ベストアンサー

A[0:2,0:2]、これを、1ブロックとし、1ブロックの平均をとり、ズラしていきます。

例:次は、A[1:2,1:2]

A[0:2,0:2]は2x2だから、次はA[1:3,1:3]ですよね?

10x10はめんどくさいので、6x6の例で

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((2, 2)) / (2 * 2) 12 13C = signal.convolve2d(A, B, mode="valid") 14 15print(A) 16print(B) 17print(C)

平均以外でも、畳み込みで処理できるものなら、Bを変えるだけです

投稿2021/01/18 00:19

jbpb0

総合スコア7653

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

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

goki_gottan

2021/01/19 03:23

ありがとうございます。 ベストアンサーにしたく思いますが、最後にmaxのときもお願いできますでしょうか?
jbpb0

2021/01/19 04:45 編集

最大値は畳み込みで処理できないため、別の関数を使いますので、変わるところだけ書きます from scipy import ndimage B = np.ones((2, 2)) C = ndimage.maximum_filter(A, footprint=B) ただし、この場合の結果Cは、元Aと同じサイズになりますので、2x2のBがはみ出るところはAの外に値が埋められて拡張されてます https://docs.scipy.org/doc/scipy/reference/generated/scipy.ndimage.maximum_filter.html の「mode」 Cの外周に不要なデータがあれば、処理後に切り取ってください 切り取るサイズは、Bのサイズと、それが奇数か偶数かで変わります
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問