“uttrs”试图以一种简单的方式来互操作使用attr和“astropy units”定义的类。
uttrs的Python项目详细描述
北方佬
uttrs
试图以一种简单的方式来互操作使用attr和astropy units定义的类。在
uttrs主要有两个函数:
uttr.ib
生成对单位敏感的属性。在uttr.array_accessor
它允许访问链接到单元的属性,并将它们转换为numpy数组。在
代码和问题
的整个源代码托管在GitHub中 https://github.com/quatrope/uttrs/
许可证
乌特人在下面 The BSD-3 License
BSD 3条款许可证允许您使用软件几乎无限自由,只要您在其中包含BSD版权和许可证声明(全文)。在
安装
这是安装uttr的推荐方法。在
安装pip
确保Python解释器可以加载uttrs代码。 最方便的方法是使用virtualenv、virtualenvwrapper和pip。在
设置并激活virtualenv后,运行以下命令:
$ pip install uttrs ...
就这样吧。在
安装开发版本
如果您希望能够偶尔使用最新的bug修复和改进来更新uttrs代码,请按照以下说明操作:
确保您已经安装了Git,并且可以从shell运行它的命令。 (在shell提示符处输入git help来测试这一点。)
看看UTTR的主要发展分支,如下所示:
^{pr2}$这将在当前目录中创建一个目录uttrs。在
然后可以使用命令继续安装
$cd uttrs $ pip install -e . ...
文件
项目的完整文档可在 https://uttrs.readthedocs.io/
联系人
如有错误或问题,请联系
Juan B. Cabral:jbcabral@unc.edu.ar
快速入门
下面的代码是一个代表星系的类的示例原型。 银河系包含:
- 三个具有粒子位置的数组(
x
,y
,z
),测量单位为kiloparsecs(u.kpc
)。在 - 粒子速度的三个阵列(
vx
,vy
,vz
),测量单位为Km/s(u.kms/u.s
)。在 - 粒子质量的阵列(
m
),用太阳质量(u.M_sun
)表示。在 - 在
notes
中记录笔记的自由文本。在
在每种情况下,我们都想知道粒子的位置,速度和质量,有无单位(如np.ndarray
)。
属性信息中的建议单位如下所示:
- 如果用户创建没有单元规范的类实例,则使用默认的假定单位。在
- 否则,如果使用另一个单位作为输入,则验证转换为默认单位的可行性。在
importattrimportuttrimportastropy.unitsasu@attr.sclassGalaxy:x=uttr.ib(unit=u.kpc)y=uttr.ib(unit=u.kpc)z=uttr.ib(unit=u.kpc)vx=uttr.ib(unit=u.km/u.s)vy=uttr.ib(unit=u.km/u.s)vz=uttr.ib(unit=u.km/u.s)m=uttr.ib(unit=u.M_sun)notes=attr.ib(validator=attr.validators.instance_of(str))arr_=uttr.array_accessor()
创造一个星系
>>>importnumpyasnp>>>importastropy.unitsasu# Creating the particle arrays>>>x=np.random.randint(1000,10_000,size=5)+np.random.rand(5)>>>y=np.random.randint(1000,10_000,size=5)+np.random.rand(5)>>>z=np.random.randint(1000,10_000,size=5)+np.random.rand(5)>>>vx=np.random.randint(1000,10_000,size=5)+np.random.rand(5)>>>vy=np.random.randint(1000,10_000,size=5)+np.random.rand(5)>>>vz=np.random.randint(1000,10_000,size=5)+np.random.rand(5)>>>m=np.random.randint(1000,10_000,size=5)+np.random.rand(5)>>>gal=Galaxy(...x=x*u.kpc,# kpc is the suggested unit...y=y*u.mpc,# milliparsec is equivalent to kpc...z=z,# we assume is the suggested kpc unit...vx=vx*(u.km/u.s),# the suggested unit...vy=vy*(u.km/u.s),# the suggested unit...vz=vz,# the suggested unit...m=m*u.M_sun,# the suggested unit...notes="a random galaxy made with random numbers")>>>galGalaxy(x=<Quantity[5632.35740606,1363.36235923,3037.46794044,2785.45299727,2515.35793673]kpc>,y=<Quantity[4457.3573917,2873.54575512,7979.68745148,5930.55394614,5903.63598164]mpc>,z=<Quantity[6122.35929872,3740.22821927,6859.42245056,7119.8256744,3632.74980958]kpc>,vx=<Quantity[7141.40469733,5713.29552487,5000.535142,9366.36402447,2967.2546077]km/s>,vy=<Quantity[8514.83018331,1362.13309457,1136.30959053,1985.49551226,3286.69029298]km/s>,vz=<Quantity[6218.56279077,2015.04638043,9919.99579782,1278.94359767,7228.21626876]km/s>,m=<Quantity[5640.62516958,4070.66620947,6106.583697,4063.39917315,3028.85393523]solMass>,notes='a random galaxy made with random numbers')# we can access al the attributes in the traditional python way>>>gal.x<Quantity[5632.35740606,1363.36235923,3037.46794044,2785.45299727,2515.35793673]kpc>>>>gal.vz# z is now a km/s<Quantity[6218.56279077,2015.04638043,9919.99579782,1278.94359767,7228.21626876]km/s># We stored y as mpc (milliparsec)>>>gal.y<Quantity[8093.44916403,2198.55398718,5464.79397835,1860.72260272,3636.64010118]mpc>
与numpy.ndarray
的简单交互
我们可以访问用uttr.ib but
作为numpy数组强制使用默认单元声明的所有相同属性。在
>>>gal.arr_.yarray([0.00809345,0.00219855,0.00546479,0.00186072,0.00363664])
上述代码相当于
>>>gal.y.to_value(u.kpc)array([0.00809345,0.00219855,0.00546479,0.00186072,0.00363664])
等效单位误差
如果我们把单位改成与默认单位不同的单位
在uttr.ib
中声明引发异常。在
让fot示例将x
定义为千克(u.kg
)
>>>gal=Galaxy(...x=x*u.kg,# kg is not equivalent to kpc...y=y,...z=z,...vx=vx,...vy=vy,...vz=vz,...m=m,...notes="a random galaxy made with random numbers")ValueError:Unitofattribute'x'mustbeequivalentto'kpc'.Found'kg'.
参考文献
阿童木
Price-Whelan, Adrian M., et al. "The Astropy project: Building an open-science project and status of the v2. 0 core package." The Astronomical Journal 156.3 (2018): 123.
- 项目
标签: