在python中重叠的2D数据分箱

时间:2014-06-26 08:50:09

标签: python 2d overlapping binning

我有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 个答案:

答案 0 :(得分:1)

我认为你可以通过将拉链移到另外2个循环之外来轻松地使你的algorythm更快,因为恕我直言,这是最长的操作:

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)