很多选择。考虑一个多边形。在大多数GIS程序的第一和最后点被重复以形成封闭,如在多边形“一”以下,使用numpy的
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.]])
用于上述的D型细胞是一个简单的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')])
你可以走一步,产生“recarray”如果你喜欢使用object.property符号与你的对象。
c = b.view(np.recarray)
与均匀D型的标准阵列中,可以访问使用切片的X值,其中添加通过柱名切片的能力的结构化阵列,最后,与可以使用对象的recarray。财产表示法。
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')])
您可能已经注意到,我在传统的ndarrays之间来回切换,那些带有命名字段和recarrays的。那是因为你可以使用相同的数据,只要你喜欢,就可以用不同的方式查看它。
谢谢,我的直觉也告诉我一个元组听起来很正确,但我对(a)不了解可以做的地图/操作符类的东西,(b)正如你所说的,有点偏离了事实我不能做tuple_coord [0] = 12.但是我开始认为这种不便类型 - 反映了坐标的本质,因为它们是相关的,如果一个操作可以改变它,它几乎总是可能改变另一个。 – levraininjaneer