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

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

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

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

Python 3.x

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

Q&A

解決済

3回答

383閲覧

python3 より速く配列内で条件の満たす要素を抽出したい

selva604

総合スコア14

NumPy

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

Python 3.x

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

0グッド

0クリップ

投稿2019/02/15 15:44

前提・実現したいこと

pythonで配列操作を行っています。適当に昇順である配列xを用意し、ランダム値より大きくなったときの要素を抽出したいです。
配列 x = [2,4,6,8,10]

ランダム値 r = 3, 理想の出力:4
r = 4, 理想の出力:6

for文を使って、出力する方法とnp.whereを使って抽出しました。それぞれ同じ処理を10000回繰り返し、プロファイリングして計算時間を測定したところ
#1:22.152sec
#2:0.949sec
より速く抽出する方法を教えてください。

ソースコード

python

1import numpy as np 2import random 3for j in range(10000): 4 x = np.arange(0,1.1,0.0001) 5 r = random.random() 6 x1 = x-r 7#1 8 for i in x: 9 if r < i: 10 print(i) 11 break 12#2 13 a = np.where(x1>0) 14 print(x[a[0][0]]) 15

補足情報(FW/ツールのバージョンなど)

python3.6

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

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

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

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

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

guest

回答3

0

pythonより早く、というのであれば、C言語で実装すればいかがでしょう。早いですぜ

投稿2019/02/15 15:48

y_waiwai

総合スコア87774

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

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

LouiS0616

2019/02/15 15:55

題意は『Pythonよりも速く』じゃなくて『Pythonで、より速く』だと思いますが...
y_waiwai

2019/02/15 15:57

しつもんくん本人がどう思っているのか、をきかないとどーしよーもないですねえw
guest

0

ベストアンサー

ソート済み配列の探索なのでnp.searchsortedを使ってください。使われるアルゴリズムはバイナリサーチです。

python

1i = np.searchsorted(x, r, side="right") 2result = x[i]

numpy.searchsorted — NumPy v1.15 Manual

投稿2019/02/15 15:56

編集2019/02/15 16:07
hayataka2049

総合スコア30933

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

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

selva604

2019/02/19 01:20

np.whereより速く処理することができました。勉強になります。ありがとうございました。
guest

0

1の速い版。

python

1print(next(i for i in x if i > r))

投稿2019/02/15 16:01

YouheiSakurai

総合スコア6142

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問