Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/360.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 具有旋转的非正交组合网格的NumPy histogram2d_Python_Python 3.x_Numpy_Datagrid_Histogram2d - Fatal编程技术网

Python 具有旋转的非正交组合网格的NumPy histogram2d

Python 具有旋转的非正交组合网格的NumPy histogram2d,python,python-3.x,numpy,datagrid,histogram2d,Python,Python 3.x,Numpy,Datagrid,Histogram2d,我需要计算(并绘制)一个historogram2d,但我的装箱网格是旋转的,而且也是非正交的。 实现这一点的一种方法是对我的数据进行变换,然后将其放入笛卡尔坐标系,计算我的historogram2d,然后应用逆变换。 在没有这种开销转换的情况下,这可以直接完成吗 我想我的问题是:在这种情况下,如何为我的historogram2d定义bin?(好的,historogram2d只接受x和y对齐的箱子) 我的数据是两个巨大的点列表(每个点10k~100k),其坐标在笛卡尔坐标系中给出(实际上是投影的C

我需要计算(并绘制)一个
historogram2d
,但我的装箱网格是旋转的,而且也是非正交的。
实现这一点的一种方法是对我的数据进行变换,然后将其放入笛卡尔坐标系,计算我的
historogram2d
,然后应用逆变换。
在没有这种开销转换的情况下,这可以直接完成吗

我想我的问题是:在这种情况下,如何为我的
historogram2d
定义
bin
?(好的,
historogram2d
只接受x和y对齐的
箱子

我的数据是两个巨大的点列表(每个点10k~100k),其坐标在笛卡尔坐标系中给出(实际上是投影的CRS,因为它们是真实世界的位置),但它们被组织在一个规则的网格中,该网格不与X轴和Y轴对齐(旋转),并且可能正交,也可能不正交。装箱网格将从中派生,因此它将是一个(旋转的)规则四边形网格

我已经看到
matplotlib
有一个
QuadMesh
对象(),所以我很有希望,但我不确定如何在
NumPy
中处理这个问题

基本上,这就是我想要实现的目标:


经过一些测试,我得出结论,将坐标转换为笛卡尔网格以计算直方图并返回以进行绘图的开销是可以接受的。NumPy中的矩阵运算相当有效,我可以在7秒内处理1.15亿多个点

但是,可以通过
Matplotlib
直接使用
Matplotlib.transforms

pcolormesh
hist2d
imshow
都接受一个
transform
关键字,该关键字可用于将笛卡尔数据绘制到所需的坐标中,如下所示:

# set I, J, bins (in the Cartesian system) and cmap
# a, b, c, d, e, f are values of the transformation matrix
transform = matplotlib.transforms.Affine2D.from_values(a, b, c, f, d, e, f)
fig, ax = plt.subplots(figsize=figsize)
_, _, _, im = ax.hist2d(I, J, bins=bins, cmap=cmap, transform=transform + ax.transData)
fig.colorbar(im)
ax.autoscale()
它实际上并不比使用
NumPy处理“back”转换快多少,但它可以使代码更轻,因为它只需要额外的一行和一个关键字。
imshow
可能有点麻烦,因为它在使用
ax.autoscale()
后不会更新显示范围,并且它将坐标处理为图像或矩阵,因此必须相应地调整
变换。出于这些原因,我更喜欢
hist2d

参考资料:


  • 听起来这可能是你的工作。它进行非常有效的空间连接。你可能也会发现速度很有用,但我自己没有用过。@kwinkunks我认为我不需要空间连接,我需要从我的两个列表(基本上,每一个和每一个可能的对)中的对计算中点,并在我的非正交旋转网格中得到这些点的计数。另外,我在安装
    geopandas
    时遇到问题,所以如果可能的话,我宁愿远离它。公平地说,安装geopandas可能会让人头疼。