python – n球面坐标系到笛卡尔坐标系

python – n球面坐标系到笛卡尔坐标系,第1张

概述有没有有效的方法在笛卡尔坐标系和 n-spherical one之间进行切换?转型如下: 以下是我的代码,但我想摆脱循环: import numpy as npimport scipy.sparse def coord_transform_n(r,alpha): """alpha: the n-2 values between [0,\pi) and last one 有没有有效的方法在笛卡尔坐标系和 n-spherical one之间进行切换?转型如下:

以下是我的代码,但我想摆脱循环:

import numpy as npimport scipy.sparse    def coord_transform_n(r,Alpha):        """Alpha: the n-2 values between [0,\pi) and last one between [0,2\pi)        """        x=[]        for i in range(Alpha.shape[0]):            x.append(r*np.prod(np.sin(Alpha[0:i]))*np.cos(Alpha[i]))        return np.asarray(x)    print coord_transform_n(1,np.asarray(np.asarray([1,2])))
解决方法 您可以通过记忆中间产品来加速您的原始代码,即
def ct_dynamic(r,Alpha):    """Alpha: the n-2 values between [0,2\pi)    """    x = np.zeros(len(Alpha) + 1)    s = 1    for e,a in enumerate(Alpha):        x[e] = s*np.cos(a)        s *= np.sin(a)    x[len(Alpha)] = s    return x*r

但仍然在速度上失去基于numpy的方法

def ct(r,arr):    a = np.concatenate((np.array([2*np.pi]),arr))    si = np.sin(a)    si[0] = 1    si = np.cumprod(si)    co = np.cos(a)    co = np.roll(co,-1)    return si*co*r>>> n = 10>>> c = np.random.random_sample(n)*np.pi>>> all(ct(1,c) == ct_dynamic(1,c))True>>> timeit.timeit('from __main__ import coord_transform_n as f,c; f(2.4,c)',number=10000)2.213547945022583>>> timeit.timeit('from __main__ import ct_dynamic as f,number=10000)0.9227950572967529>>> timeit.timeit('from __main__ import ct as f,number=10000)0.5197498798370361
总结

以上是内存溢出为你收集整理的python – n球面坐标系到笛卡尔坐标系全部内容,希望文章能够帮你解决python – n球面坐标系到笛卡尔坐标系所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/1207263.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-04
下一篇 2022-06-04

发表评论

登录后才能评论

评论列表(0条)

保存