Если я правильно понимаю, у вас есть координаты (x [i], y [i], z [i]), i = 0, ..., N-1, и вы хотите посчитать, сколько из них заканчивается в заданной ячейке сетки в трехмерном кубе?
Это можно сделать с помощью numpy.histogramdd
:
import numpy as np
# some random points in a cube
x = np.random.rand(100)
y = np.random.rand(100)
z = np.random.rand(100);
# specify grid in a cube
xgrid = np.linspace(0.0, 1.0, 5)
ygrid = np.linspace(0.0, 1.0, 6)
zgrid = np.linspace(0.0, 1.0, 7)
# compute counts
counts, edges = np.histogramdd(np.c_[x, y, z], bins=(xgrid, ygrid, zgrid))
print counts.shape # -> (4, 5, 6)
# number of points in the box
# xgrid[1] <= x < xgrid[2] && ygrid[2] <= y < ygrid[3] && zgrid[0] <= z < zgrid[1]
print counts[1, 2, 0]
Если вы хотите выяснить, в какой ячейке сетки находится каждая из точек, это можно сделать с помощью searchsorted
:
ix = np.searchsorted(xgrid, x) - 1
iy = np.searchsorted(ygrid, y) - 1
iz = np.searchsorted(zgrid, z) - 1
# point (x[3], y[3], z[3]) is in the following grid cell
print ix[3], iy[3], iz[3]