用显坐标做数学的便利班

coordinates的Python项目详细描述


坐标

Build Status

处理需要数学和显式排序的坐标的便利类。

支持Python3.4+

动机

Numpy数组非常适合用存储为数组的坐标进行数学运算

dict非常适合处理顺序不断变化的坐标系 (例如,在c和fortran顺序之间)。

但如果你两者都想要呢?

(注意:如果你在做很多数学题坚持numpy

安装

pip install coordinates

用法

Coordinates是Mappings(即dict样)。它们不会暴露出突变的界面,但是 我们都是成年人,所以如果你真的想修改内部的_dict,我不会 阻止你。

实例化

它们可以以dict可以(从另一个Mapping,成对序列, 一些关键字参数,或上述参数的混合)。

fromcoordinatesimportCoordinateCoordinate({'x':1,'y':2})Coordinate({'x':1},y=2)Coordinate([('x',1),('y',2)])Coordinate(x=1,y=2)

如果定义了一个订单(稍后将详细介绍),您还可以从一个 参数,它是一个序列,或者来自一个*args数字。

Coordinate([1,2],order='xy')Coordinate(1,2,order='xy')Coordinate.default_order='xy'Coordinate([1,2])Coordinate(1,2)
<^ >因为^ {CD3>}s可以从其他^ {< CD3>}s实例化,所以可以“扩展”现有坐标。 进入新的维度。

coord_2d=Coordinate(x=1,y=2)coord_3d=Coordinate(coord_2d,z=3)

最后,许多Coordinate可以使用from_sequence

Coordinate.from_sequence([(1,2,3),(3,4,5)],order='xyz')Coordinate.from_sequence([{'x':1,'y':2},{'x':3,'y':4}],z=10)

注意:

  • order依赖的实例化与**kwargs不兼容
  • 从元组序列的实例化在2d中将失败,因为它将被解释为 键值对。在这里使用理解:Coordinate.from_sequence(zip('xy', row) for row in sequence)

数学

坐标做数学就像你期望的那样,另一个操作数和dict一样。 有相同的钥匙,或号码。

coord=Coordinate(x=1,y=2,z=3)coord*2==Coordinate(x=2,y=4,z=6)>>>Truecoord**2==Coordinate(x=1,y=4,z=9)>>>Truecoord+coord==Coordinate(x=2,y=4,z=3)>>>Truecoord+=1# coord is a reference to a new object; no mutationcoord==Coordinate(x=2,y=3,z=4)>>>Trueabs(Coordinate(x=-10,y=10))==Coordinate(x=10,y=10)>>>Trueimportmathmath.ceil(Coordinate(x=0.5))==Coordinate(x=1)>>>Truemath.floor(Coordinate(x=0.5))==Coordinate(x=0)>>>True

它们也有一些方便的方法来获得密钥的和、积或范数。

coord.sum()==9>>>Truecoord.prod()==24>>>TrueCoordinate(x=3,y=4).norm(order=2)==5>>>True

订购

您可以按特定顺序获取Coordinate的键、值或项:

coord.to_list('yxz')==[2,1,3]>>>Truelist(coord.items('yxz'))==[('y',2),('x',1),('z',3)]>>>True

单个实例的默认顺序可以在实例化时给定,也可以进行变异(这不影响相等性)。

可以在类上设置所有Coordinate的默认顺序这会影响现有实例,但不会 如果是显式设置,则重写它们的顺序。

如果没有设置实例^ {< CD14>}或类^ {CD20>},则返回到反向词典编纂。

coord3=Coordinate(x=1,y=2,z=3,order='zxy')coord3.order='yzx'Coordinate.default_order='xyz'

子类化

如果您在一个空间中工作,spaced_coordinate工厂可以使用一组固定的 键和可选的默认顺序。

fromcoordinatesimportspaced_coordinateCoordinateXYZC=spaced_coordinate('CoordinateXYZC','xyzc')# this will raise a ValueErrorCoordinateXYZC(x=1,y=2,z=3)

或者您可以直接对Coordinate进行子类划分。

价值访问

可以使用类似dict的语法(coord['x']coord.get('y', 2))访问坐标值,或者为了方便起见, 如果键是字符串,则为类似(coord.z)的属性。

如果不希望其他应用程序使用与订单相关的功能,基类MathDict 在这里也实现了。

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

推荐PyPI第三方库


热门话题
java编辑并重新运行spring引导单元测试,无需重新加载上下文即可加快测试速度   为什么我不能做演员?   java为什么是线程。join通常用于停止安卓中的线程   java从weblogic服务器调用JSON POST REST服务时收到400:错误请求   java在DeviceAdmin模式禁用时设置身份验证?   java SortedMap的keySet()能否始终安全地强制转换到SortedSet?   安卓 java。lang.NoSuchMethodException可包裹类   java JOGL库安装   javatomcat内存管理   java使用getString()中的变量   java将最小星号设置为评级栏   Java中字符串相等的println()方法。。。它到底是如何工作的?   java如何从文本中输出的数组中放入随机图像