実現したいこと
お世話になります。
numpyのndarrayの中に、複数のX,Y,Z座標が格納されています。
[[X1, Y1, Z1], [X2, Y2, Z2], : [Xn, Yn, Zn]]
このndarrayを計算に使うために以下のような形に変形したいです。
[[X1 / Z1, X2 / Z2, ... Xn / Zn], [Y1 / Z1, Y2 / Z2, ... Yn / Zn], [ 1 , 1 , ... 1 ]]
座標の数が多い(数十万ポイント)為、なるべく高速に処理をしたいと考えております。
試したこと
そこで、以下のようなコードを試しました。
Python
1 2import numpy as np 3 4def func(input): 5 return np.array([[line[0] / line[2], line[1] / line[2], 1] for line in input]).T 6 7input = np.arange(300000).reshape([100000, 3]) 8output = func(input) 9
Forループで回すよりもかなり高速に実行できましたが、
転置をとっていたり内包表記で処理してからndarrayに再変換しているなど、
不要なメモリコピーなどを行っており、効率があまり良くないように感じます。
上記関数 Func をより効率良く記述する方法がありましたら教えて頂けないでしょうか。
よろしくお願い致します。
補足情報(FW/ツールのバージョンなど)
python : Python 2.7
numpy : 1.13.3
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/05/30 02:30
2019/05/30 02:33