Countig指向网格框

Max*_*ers 4 python

假设有一个网格,其中包含一些点,就像下面的图中一样. 演示 我的目标是计算每个网格的点数.这是我的第一次尝试.

            for tupel in point_list:
               a=0
               b=0
               for i in self.boxvector:
                  if tupel[0] < i:
                     a=self.boxvector.index(i)-1
                     break

               for i in self.boxvector:
                  if tupel[1] < i:
                     b=self.boxvector.index(i)-1
                     break

               farray[a][b]+=1
Run Code Online (Sandbox Code Playgroud)

它有效,但速度很慢.有没有加快一点?

我使用一个名为的变量boxvector来定义网格.在这个例子中,boxvector是:boxvector = [-1., -.5, 0, .5, 1.].网格总是二次方,最大值为-1和1.方框表示通过farray,看起来像farray = [[0,0,0,0],[0,0,0,0],[0,0,0,0],[0,0,0,0]].因此,每个算法在相应的框中找到一个点时,每个框都有一个值递增.point_list具有表单point_list = [(x0,y0),(x1,y1),(x3,y3), ...]

谢谢您的帮助 !

Joe*_*ton 7

看来你似乎已经在使用matplotlib,只需使用numpy.histogram2d.

举个例子:

import numpy as np
import matplotlib.pyplot as plt

t = np.linspace(0, 4*np.pi, 100)
x = np.cos(3 * t)
y = np.sin(t)

gridx = np.linspace(-1, 1, 5)
gridy = np.linspace(-1, 1, 5)

grid, _, _ = np.histogram2d(x, y, bins=[gridx, gridy])

plt.figure()
plt.plot(x, y, 'ro')
plt.grid(True)

plt.figure()
plt.pcolormesh(gridx, gridy, grid)
plt.plot(x, y, 'ro')
plt.colorbar()

plt.show()
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

在此输入图像描述