python中带重叠的二维数据分块

python中带重叠的二维数据分块,python,2d,overlapping,binning,Python,2d,Overlapping,Binning,我有XYZ类型的数据。例如: x = numpy.arange(100) y = numpy.arange(100) Z = numpy.random.random_sample((100,)) 例如,我想用重叠长度dx=2和dy=2来存储数据。我所做的是: nx = len(x) ny = len(y) bin_data = np.zeros((nx, ny)) For i in range(nx): For j in range(ny): For a, b, c i

我有XYZ类型的数据。例如:

x = numpy.arange(100)
y = numpy.arange(100)
Z = numpy.random.random_sample((100,))
例如,我想用重叠长度
dx=2
dy=2
来存储数据。我所做的是:

nx = len(x)
ny = len(y)
bin_data = np.zeros((nx, ny))
For i in range(nx):
    For j in range(ny):
        For a, b, c in zip(x,y,z):
            if (x[i] < a) and (a < x[i] + dx):
                if (y[j] < b) and (b < y[j] + dy):
                    bin_data[i,j] += c
nx=len(x)
ny=len(y)
bin_data=np.零((nx,ny))
对于范围内的i(nx):
对于范围内的j(ny):
对于拉链中的a、b、c(x、y、z):
如果(x[i]

对于这些小数据,程序运行良好。但是,如果数据太大,我会花太多时间。你能推荐一些更快的算法来处理python中重叠的数据吗。我知道
numpy.historogram2d
相当快,但它不适用于重叠装箱

我想,通过将拉链移到其他两个循环之外,您可以轻松加快算法速度,因为这是最长的操作:

for a, b, c in zip(x,y,z):
    for i in range(nx):
        for j in range(ny):
            ...
然后,在您的示例中,您可以使用x[i]==i和y[j]==j(我添加
+1
,因为您有严格的

for a, b, c in zip(x,y,z):
    for i in range(a - dx + 1, a):
        for j in range(b - dy + 1, b):
            bin_data[i,j] += c