python中处理坐标的最合适的变量类型
我正在编写python代码,它使用笛卡尔方法和三角法来移动、调整和旋转平面上的形状,并跟踪和报告这些诡计 它不会占用大量计算时间-通常,用户指令会导致单个移动/旋转/调整大小操作 我想知道形状坐标和尺寸对最合适的变量类型是什么,以及为什么 我考虑过的类型是python中处理坐标的最合适的变量类型,python,numpy,types,coordinates,complex-numbers,Python,Numpy,Types,Coordinates,Complex Numbers,我正在编写python代码,它使用笛卡尔方法和三角法来移动、调整和旋转平面上的形状,并跟踪和报告这些诡计 它不会占用大量计算时间-通常,用户指令会导致单个移动/旋转/调整大小操作 我想知道形状坐标和尺寸对最合适的变量类型是什么,以及为什么 我考虑过的类型是 x = 10 y = -15 list_coords = [x, y] tuple_coords = (x, y) import numpy as np array_coords = np.array([x, y]) import cm
x = 10
y = -15
list_coords = [x, y]
tuple_coords = (x, y)
import numpy as np
array_coords = np.array([x, y])
import cmath as cm
complex_coords = x + j*y
如果你知道其他好的选择,也请告诉我
谢谢 简短回答,元组 从“”线程 元组是异构数据结构(即,它们的条目具有 不同的含义),而列表是同质序列 元组有结构,列表有顺序。 使用这种区别可以使代码更加明确和易懂 由于元组是由异构实体组成的,因此元组是处理坐标系的一种很好的方法,而不是由同态实体的顺序组成。此外,对于元组,坐标运算(如加法和减法)也相当简单 例如:
import operator
a = (1,2,3)
b = (5,6,7)
c = tuple(map(operator.add, a, b))
元组也是不可变的。一开始这似乎不方便,但在函数式编程技术中使用这样的不可变数据有很大的优势。简短回答,Tuple 从“”线程 元组是异构数据结构(即,它们的条目具有 不同的含义),而列表是同质序列 元组有结构,列表有顺序。 使用这种区别可以使代码更加明确和易懂 由于元组是由异构实体组成的,因此元组是处理坐标系的一种很好的方法,而不是由同态实体的顺序组成。此外,对于元组,坐标运算(如加法和减法)也相当简单 例如:
import operator
a = (1,2,3)
b = (5,6,7)
c = tuple(map(operator.add, a, b))
元组也是不可变的。起初这似乎不方便,但在函数式编程技术中使用这样的不可变数据有很大的优势。有很多选择。考虑多边形。在大多数GIS程序中,第一个点和最后一个点被重复以形成闭合,如下面使用numpy的多边形“a”
import numpy as np
a = np.array([[0., 0.], [0., 1000.], [1000., 1000.], [1000., 0.], [ 0., 0.]])
a
array([[ 0., 0.],
[ 0., 1000.],
[ 1000., 1000.],
[ 1000., 0.],
[ 0., 0.]])
上面的数据类型是一个简单的float64。通过按如下方式分配适当的数据类型,可以将其转换为结构化数组:
b = np.zeros((a.shape[0]), dtype=[('Xs', '<f8'), ('Ys', '<f8')])
b['Xs'] = a[:,0]; b['Ys'] = a[:,1]
b
array([(0.0, 0.0), (0.0, 1000.0), (1000.0, 1000.0), (1000.0, 0.0), (0.0, 0.0)],
dtype=[('Xs', '<f8'), ('Ys', '<f8')])
对于具有统一数据类型的标准数组,您可以使用切片来访问X值,对于结构化数组,您可以添加按列名切片的功能,最后,对于recarray,您可以使用object.property表示法
args = [a[:,0], b['Xs'], c.Xs] # ---- get the X coordinates
print('{}\n{}\n{}'.format(*args))
[ 0. 0. 1000. 1000. 0.]
[ 0. 0. 1000. 1000. 0.]
[ 0. 0. 1000. 1000. 0.]
可以从阵列中的唯一点获取多边形质心
np.mean(a[:-1], axis=0)
array([ 500., 500.])
事实上,从给定正确形式的数组中很容易获得唯一点
np.unique(b)
array([(0.0, 0.0), (0.0, 1000.0), (1000.0, 0.0), (1000.0, 1000.0)],
dtype=[('Xs', '<f8'), ('Ys', '<f8')])
np.unique(b)
数组([(0.0,0.0),(0.0,1000.0),(1000.0,0.0),(1000.0,1000.0)],
dType = [(xs),'p>许多选项。考虑多边形。在大多数GIS程序中,第一个和最后一个点被重复以形成闭合,如在下面的多边形A’中使用NUMPY < /P>
import numpy as np
a = np.array([[0., 0.], [0., 1000.], [1000., 1000.], [1000., 0.], [ 0., 0.]])
a
array([[ 0., 0.],
[ 0., 1000.],
[ 1000., 1000.],
[ 1000., 0.],
[ 0., 0.]])
上面的数据类型是一个简单的float64。您可以通过分配适当的数据类型将其转换为结构化数组,如下所示:
b = np.zeros((a.shape[0]), dtype=[('Xs', '<f8'), ('Ys', '<f8')])
b['Xs'] = a[:,0]; b['Ys'] = a[:,1]
b
array([(0.0, 0.0), (0.0, 1000.0), (1000.0, 1000.0), (1000.0, 0.0), (0.0, 0.0)],
dtype=[('Xs', '<f8'), ('Ys', '<f8')])
对于具有统一数据类型的标准数组,您可以使用切片来访问X值,对于结构化数组,您可以添加按列名切片的功能,最后,对于recarray,您可以使用object.property表示法
args = [a[:,0], b['Xs'], c.Xs] # ---- get the X coordinates
print('{}\n{}\n{}'.format(*args))
[ 0. 0. 1000. 1000. 0.]
[ 0. 0. 1000. 1000. 0.]
[ 0. 0. 1000. 1000. 0.]
可以从阵列中的唯一点获取多边形质心
np.mean(a[:-1], axis=0)
array([ 500., 500.])
事实上,从给定正确形式的数组中很容易获得唯一点
np.unique(b)
array([(0.0, 0.0), (0.0, 1000.0), (1000.0, 0.0), (1000.0, 1000.0)],
dtype=[('Xs', '<f8'), ('Ys', '<f8')])
np.unique(b)
数组([(0.0,0.0),(0.0,1000.0),(1000.0,0.0),(1000.0,1000.0)],
dtype=[('Xs','谢谢,我的直觉也告诉我元组听起来不错,但我(a)不知道你能做的映射/运算符之类的事情,(b)正如你所说,我不能做元组[0]这一事实让我有点犹豫=12.但我开始认为这种不便反映了坐标的本质,因为坐标是相关的,如果一个操作可以改变一个,它几乎总是可能改变另一个。谢谢,我的直觉也告诉我元组听起来是对的,但我是(a)不知道你可以做的映射/操作符之类的事情,(b)如你所说,我不能做tuple_coord[0]这一事实让我有点犹豫但是我开始认为这种不便反映了坐标的本质,因为它们是相关的,如果一个操作可以改变一个,那么它几乎总是可能改变另一个。