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

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

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

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

Python 3.x

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

Python

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

Q&A

1回答

1375閲覧

Numpyを用いたxy平面におけるスライディングウィンドウの走査

hikaru397

総合スコア6

NumPy

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

Python 3.x

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

Python

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

0グッド

0クリップ

投稿2020/07/05 02:14

編集2020/07/05 08:47

大きさ1×1のスライディングウィンドウを, 指定したステップサイズ(0.5)ずつ動かしてxy平面を操作し, 走査しているスライディングウィンドウに含まれる点を取り出したいです.

xy平面(0<=x<=100, 0<=y<=100)に存在する点は以下の形で保持しています.

coordinate:
[[4.1, 4.7]
[0.1, 2.5]
[4.5, 6.2]
...
[0.4, 0.8]
[2.2, 6.3]]

coordinate.shape: (N, 2)
type(coordinate): <class 'numpy.ndarray'>

Numpyを利用して高速にスライディングウィンドウを走査し, スライディングウィンドウに含まれる点を取り出すには, どのようにすれば良いでしょうか.

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

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

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

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

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

can110

2020/07/05 09:06

逆に、点からスライディングウインドウのステップ位置?を求めるほうが簡単で自然かと思いますが、いかがでしょうか?
hikaru397

2020/07/05 09:59

すみません。どういうことでしょうか?
can110

2020/07/05 10:59

まずスライディングウインドウの中心が原点にあるとして、その開始位置からのステップ数を求めたいとします。 例えば点(x=1.2, y=3.4)において xは、1.2/0.5を切り捨てて2,その次のステップ位置のウインドウにも含まれるので3も。 あわせて[2,3]。同様にyは[6,7]。 xとyの組み合わせで計4個のウインドウ位置が得られる感じです。
hikaru397

2020/07/06 00:35

スライディングウィンドウの位置が分かった後に、どのようにしてNumpyで各スライディングウィンドウに含まれる点を取り出せば良いでしょうか?
can110

2020/07/06 00:44

「点を取り出す」とは具体的にはどのような操作、結果を得たいのでしょうか? スライディングウインドウは関係なく、なんらかのNumpy配列?からたとえば点[4.1, 4.7]を取り出した結果はどのような結果になる(ほしい)のでしょうか?
guest

回答1

0

高速かどうかはともかく,numpy行列ならは(x_min, y_min), (x_min+r_size, y_min), (x_min, y_min+r_size), (x_min+r_size, y_min+r_size)に囲まれた点については,次のように比較的少ないコードで取り出することが可能ですね。

python

1def get_rect_points(ps, x_min, y_min, r_size): 2 x_flag = (ps[:, 0] >= x_min) * (ps[:, 0] <= x_min + r_size) 3 y_flag = (ps[:, 1] >= y_min) * (ps[:, 1] <= y_min + r_size) 4 return ps[x_flag * y_flag, :]

たとえば次のような感じで点が得られます。

>>> import numpy as np >>> coordinate = np.random.rand(20000, 2) * 100 # 範囲に点が含まれない時 >>> get_rect_points(coordinate, 0, 0, 1) array([], shape=(0, 2), dtype=float64) # 範囲に点が含まれる時 >>> get_rect_points(hoge, 10, 10, 1) array([[10.01639846, 10.49512023], [10.21324579, 10.03462124]]) >>>

投稿2023/11/12 04:36

ujimushi_sradjp

総合スコア2152

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問