我有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
对于这些小数据程序运行良好。但是,如果数据很大,则需要花费太多时间。你能否推荐任何更快的算法来在python中重叠数据。我知道numpy.histogram2d
非常快,但它不适用于重叠分箱。
答案 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)