“uttrs”试图以一种简单的方式来互操作使用attr和“astropy units”定义的类。

uttrs的Python项目详细描述


北方佬

uttrs试图以一种简单的方式来互操作使用attr和astropy units定义的类。在

img


QuatroPeBuild StatusDocumentation StatusLicensePython 3.8+PyPI

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

快速入门

下面的代码是一个代表星系的类的示例原型。 银河系包含:

  • 三个具有粒子位置的数组(xyz),测量单位为kiloparsecsu.kpc)。在
  • 粒子速度的三个阵列(vxvyvz),测量单位为Km/su.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.

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
带Maven的Eclipse Java存储库:缺少工件:compile   java如何以编程方式停止RMI服务器并通知所有客户端   java Roboguice抛出ClassNotFoundException:AnnotationDatabaseImpl   java为什么lucene 4.0删除IndexWriter类的两个构造函数?   nls如何避免java项目上不需要的日志消息?   测试无法在Selenium Webdriver(java)中定位iframe   使用XML的java servlet   java如何使用jxl用****屏蔽单元格   java使用SQLite从数据库中选择“没有这样的列”   导入扫描程序后出现java编译错误   插入查询的java空指针异常   使用创建PostgreSQL数据库。Java应用中的sql脚本   java使用jsoup将HTML解析为格式化的明文