python中带重叠的二维数据分块
我有XYZ类型的数据。例如: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
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