Python中重叠的二维数据分组

0 投票
1 回答
723 浏览
提问于 2025-04-18 11:09

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

x = numpy.arange(100)
y = numpy.arange(100)
Z = numpy.random.random_sample((100,))

我想把这些数据分成小块,比如说重叠的长度是dx = 2dy = 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

对于这些小数据,程序运行得很好。但是如果数据量大,就会花费我太多时间。你能推荐一些在Python中更快的算法来处理重叠分块的数据吗?我知道numpy.histogram2d速度挺快的,但它不支持重叠分块。

1 个回答

1

我觉得你可以通过把zip放到另外两个循环之外来让你的算法更快,因为在我看来,zip是最耗时的操作:

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

实际上,只要x = f(i)和y = g(i),而f和g是单调的且容易反转的,你就可以进行第二个优化,这样就能得到i = f-1(x)和j = g-1(y)

撰写回答