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

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

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

Anacondaは、Python本体とPythonで利用されるライブラリを一括でインストールできるパッケージです。環境構築が容易になるため、Python開発者間ではよく利用されており、商用目的としても利用できます。

NumPy

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

Python 3.x

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

Ubuntu

Ubuntuは、Debian GNU/Linuxを基盤としたフリーのオペレーティングシステムです。

Q&A

0回答

915閲覧

numbaによるnumpy利用アフィン変換の高速化

hashimo1994

総合スコア4

Anaconda

Anacondaは、Python本体とPythonで利用されるライブラリを一括でインストールできるパッケージです。環境構築が容易になるため、Python開発者間ではよく利用されており、商用目的としても利用できます。

NumPy

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

Python 3.x

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

Ubuntu

Ubuntuは、Debian GNU/Linuxを基盤としたフリーのオペレーティングシステムです。

0グッド

0クリップ

投稿2019/09/12 03:34

編集2019/09/12 03:36

前提・実現したいこと

このpython3のプログラムをnumbaで高速化するにはどうしたら良いでしょうか。
配列内にcsvファイルから取り込んだ3次元点軍の座標データを入れ、3次元のアフィン変換で座標変換をするプログラムです。

### 該当のソースコード python3 import numpy as np import pandas import pickle import redis import numba import time # 時間計測用メソッド def calctime(func): start = time() r = func() return {'value': r, 'time': time()-start} #以下,希望するアフィン変換の関数 def zrot (yaw,x,y,z): return np.array([ [1,0,0,x], [0,np.cos(yaw),-np.sin(yaw),y], [0,np.sin(yaw),np.cos(yaw),z], [0,0,0,1]]) def yrot (roll): return np.array([[np.cos(roll),0,np.sin(roll),0], [0,1,0,0], [-np.sin(roll),0,np.cos(roll),0], [0,0,0,1]]) def xrot (pitch): return np.array([[np.cos(pitch),-np.sin(pitch),0,0], [np.sin(pitch),np.cos(pitch),0,0], [0,0,1,0 ], [0,0,0,1]]) def main(): # csvの読み込み csv = pandas.read_csv('10[m]MergedFilecarXYZonly.csv',header=None) # バージョン2のプロトコルを利用してバイト列をダンプ dumped = pickle.dumps(csv, protocol=2) # ダンプしたバイト列をredisに保存 r = redis.Redis(host='localhost', port=6379, db=0) r.set('10[m]MergedFilecarXYZonly.csv', dumped) A = pickle.loads(r.get('10[m]MergedFilecarXYZonly.csv')) return A #npdataの形を、pandaで読み込んだデータフレームの形に変形する #@numba.jit def doit(A): npdata=np.array(A.values.flatten()) print(npdata) print("\nok") XYZarray = np.reshape(npdata,(-1,3)) yaw_tgt = 0*(np.pi/180) X_tgt = 0 Y_tgt = 0 Z_tgt = 0 roll_tgt =0 pitch_tgt = 0 yaw_car = 0*(np.pi/180) X_car = 0 Y_car = 0 Z_car = 0 roll_car = 0 pitch_car = 0 #affin = np.empty(4,4,dtype=np.float64) #A = np.empty(4,4,dtype=np.float64) #B = np.empty(4,4,dtype=np.float64) #C = np.empty(4,4,dtype=np.float64) A = np.dot(zrot(yaw_tgt,X_tgt,Y_tgt,Z_tgt) ,yrot(roll_tgt)) B = np.dot(xrot(pitch_tgt), zrot((-1)*yaw_car,(-1)*X_car,(-1)*Y_car,Z_car)) C = np.dot(yrot((-1)*roll_car),xrot((-1)*pitch_car)) affin = np.dot(A,B) affin = np.dot(affin,C) #座標変換用のアフィン変換行列affinをデータの転地行列にかける XYZarray2 = np.empty(np.shape(XYZarray.T)) Dot_af = np.vstack( (XYZarray.T,np.ones(np.shape(XYZarray.T[0,:])))) XYZarray_af = np.dot(affin , Dot_af) XYZarray2 = XYZarray_af[0:3,:].T #print(XYZarray) print("2tつめ") print(XYZarray2) print("おk") start = time.time() B = main() doit(B) print("original took %f s" %(time.time() - start))
### 試したこと def doit()の上に@numba.jit を書いてみましたが以下のメッセージが出て低速化します(書く前:0.013074 s→書いた後:0.815948 s) zenbuyasoudan.py:67: NumbaWarning: Compilation is falling back to object mode WITH looplifting enabled because Function "doit" failed type inference due to: Untyped global name 'zrot': cannot determine Numba type of <class 'function'> File "zenbuyasoudan.py", line 92: def doit(A): <source elided> A = np.dot(zrot(yaw_tgt,X_tgt,Y_tgt,Z_tgt) ,yrot(roll_tgt)) ^ @numba.jit /home/hiroki/anaconda3/lib/python3.7/site-packages/numba/compiler.py:725: NumbaWarning: Function "doit" was compiled in object mode without forceobj=True. File "zenbuyasoudan.py", line 68: @numba.jit def doit(A): ^ self.func_ir.loc)) /home/hiroki/anaconda3/lib/python3.7/site-packages/numba/compiler.py:734: NumbaDeprecationWarning: Fall-back from the nopython compilation path to the object mode compilation path has been detected, this is deprecated behaviour. For more information visit http://numba.pydata.org/numba-doc/latest/reference/deprecation.html#deprecation-of-object-mode-fall-back-behaviour-when-using-jit File "zenbuyasoudan.py", line 68: @numba.jit def doit(A): ^ warnings.warn(errors.NumbaDeprecationWarning(msg, self.func_ir.loc)) ### 補足情報(FW/ツールのバージョンなど) 環境はubuntu18.04でvsdodeとanacondaを用いています どうかよろしくお願い申し上げます

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

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

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

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

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

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

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

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

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問