我有一个包含以下字段的数据文件:
Index X.coor Y.coor Status Height Census
1 197.10001 456.89999 1 696 1
2 84.20000 74.80000 0 356 1
3 282.70001 177.50000 1 439 1
...
999 427.70001 418.10001 0 543 1
这些指数代表地理笛卡尔X-Y网格上的点,如下所示:
我想在假设空间(面向对象)中绘制点,并将地图划分为我指定的维度。例如,上面的网格尺寸为7x7。然后我想循环通过笛卡尔网格上的每个方格并计算该区域中点的密度。
Density = number of points in square / area of the square
笛卡尔地图上的点位置是固定的。正方形的面积将根据我划分笛卡尔X-Y网格的尺寸而不同。您是否知道允许我这样做的任何Python模块?我想用OOP做这个,这样我就可以跟踪方块中每个点的其他属性。
我认为我能做到的一种方法是获得X坐标和Y坐标的最大值和最小值。这将给我4个数据点,我可以用它来形成一个矩形并计算该区域。然后我编写一个函数,将矩形划分为X个Y子区域。到目前为止,如果我想要一个8乘16的网格,我将矩形的长度除以6并将宽度除以16得到不同大小的正方形。最后,我写了一个循环来计算笛卡尔网格的每个区域的密度。我可以将每个区域的密度存储在矩阵中。
是否有允许我这样做的Python模块?
答案 0 :(得分:3)
您可以查看NumPy的histogram2d并将其用作
import numpy as np
np.histogram2d(x, y, bins=(nx,ny), normed=True)
示范案例中的nx = ny = 7
。
有关随机分布的x,y
坐标的示例:
x = np.random.random(1000)
y = np.random.random(1000)
nx, ny = 7, 7
H, _, _ = np.histogram2d(x, y, bins=(nx,ny), normed=True)
pylab.imshow(H, interpolation='nearest')
pylab.colorbar()
pylab.show()