###前提・実現したいこと
PythonのNumpyを使って、大型のテンソルを処理しようとしています。
下記のものが自分で書いたコードになりますが、
処理速度が遅いために、みなさんにより処理速度の速い書き方を教わりたいと思い、相談いたします。
行列を使ってやりたいことを以下に書きます。
xnという100個のデータの集合の4次元のテンソルがあり、
xnの100個それぞれのデータに対してtnというラベルが対応して振られています。
tnは0〜9までの数がランダムに100個入っており、含まれてない数もあれば、重複している数もあります。
# **tnとpyは0〜9までの数がランダムに100個入っており、含まれてない数もあれば、重複している数もあります。** tn -> [9, 2, 1, 5,...i..1] xn -> [[[[0.1, ..... 0.2], [...]], [[...], [...]]], [[[0.1, ..... 0.2], [...]], [[...], [...]]]] py -> [1, 3, 8, 2,...i..3]
また、pyというtnと同じ100次元のラベルのベクトルがあります。
そこで、pyに対して、tnとのラベルの値を基準として2つのラベルの対応を崩さない状態で状態で、
xnから(25, 250, 250)のテンソルをランダムにピックアップしたいのです。
この条件で自分が書いたコードが以下のものになります。
# versions: python=v3.6.1, numpy=v1.12.1 import numpy as np xn = np.ndarray # xn.shape => (100, 25, 250, 250) tn = np.ndarray # tn.shape => (100) py = np.ndarray # py.shape => (100) for n in range(50000): ansr = np.asarray([xn[np.random.choice(np.where(tn == y)[0], 1, replace=True)[0]] for y in py])
###解決したいこと、聞きたいこと。
上記ように処理を50,000回ほど繰り返す必要があるのですが、
上記のコードがボトルネックになっていて、処理速度がとても遅いです。
PythonのNumpyを使う前提で、上記のゴールを達成するできるだけ速いコードの書き方を提案してもらえないでしょうか。
どうぞよろしくお願いします。
###補足情報(言語/FW/ツール等のバージョンなど)
versions
- python=3.6.1
- numpy=1.12.1
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/12/25 01:46
2017/12/25 01:46
2017/12/25 01:48
2017/12/25 02:00