Numexpr は、numpy 配列を操作するためにいくつかの式をジッティングできるようにする Python モジュールです。さて、それが私にできることならクールだろう:
ne.evaluate( """
r = y
cita = 2*pi*x/x_span
nx = CENTER_X + cos( cita ) * r
ny = CENTER_Y + sin( cita ) * r
""", local_dict={ 'x': xy_array[:,0],
'y': xy_array[:,1],
'x_span': x_span,
'y_span': y_span,
'pi': 3.141592,
'nx': nxy[:0],
'ny': nxy[:1],
'CENTER_X': ...,
'CENTER_Y': ...,
},
)
の計算値を再利用して、と のcita
両方を計算nx
できますny
。また、x と y を 1 回取得する必要があり、それらはメモリ内で次々に取得されるため、キャッシュ ミスも少なくなります。nx
との書き方も同様ny
です。しかし、私が理解している限り、現状では、この種のコードは Numexpr では不可能です。
だから、私の質問:
これを行うことができるpython + numpyのより高度なものはありますか? (numexpr の一部のスーパーセット)
または、私は間違っていますか?これは numpy と numexpr で簡単に実行できますか?
注 1: この小さな関数を C/C++ などでかなりの数の方法で実装できること、またはパフォーマンスをあまり気にせず、numexpr の有無にかかわらず numpy を含むハックを実行できることを知っています。
注2: weaveについては知っていますが、「Cをいじることを伴う、クールでメンテナンスされていないソリューション」の袋に入れました。