Python 如何使用numpy a la numexpr进行就地极坐标变换

Python 如何使用numpy a la numexpr进行就地极坐标变换,python,caching,numpy,numexpr,Python,Caching,Numpy,Numexpr,Numexpr是一个python模块,它支持使用numpy数组对某些表达式进行jitting。现在,如果它允许我这样做,那就太酷了: 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],

Numexpr是一个python模块,它支持使用numpy数组对某些表达式进行jitting。现在,如果它允许我这样做,那就太酷了:

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一次,而且它们在内存中是一个接一个的,所以缓存未命中的次数也会减少;写入
nx
ny
也是如此。然而,据我所知,就目前情况而言,这种代码在Numexpr中是不可能实现的

所以,我的问题是:

python+numpy是否有更高级的东西可以做到这一点?(numexpr的某些超集)

或者,我错了,这可以简单地用numpy和numexpr完成吗

注1:我知道我可以用C/C++/任何东西以多种方式实现这个小函数,或者我可以不太关心性能,而做一些涉及numpy(带或不带numexpr)的黑客


注2:我知道,但我把它放在“不酷、不维护的解决方案中,这将涉及到C”。

我很困惑,你只是在尝试从笛卡尔坐标转换到极坐标吗?我以转换到极坐标为例。我只是想找一个一般的方法来做这类事情,赛顿?从我所看到的来看,使用numexpr是不可能的。您还可以考虑从python调用Julia?不知道你在找什么。谢谢你,爬行动物。你的评论强化了我关于numexpr不适合这个的观点。我的具体问题是通过一种低效的变通方法解决的,但这个问题是关于是否有一种方法可以通过“dag”或局部变量a-ala-numexpr,以及Numpy和Python实现计算。