Scipy中的3d插值-密度网格

问题描述

| 我有一组表示多个对象的3d位置的坐标。这些点取自3维立方体的模拟。我需要做的是在多维数据集上制作一个3d网格,然后将这些点分配给它们在网格上的正确位置,这样我便可以找到网格每个部分中对象的密度。例如,我一直在搜索插值和网格文档(http://docs.scipy.org/doc/scipy/reference/generation/scipy.interpolate.griddata.html#scipy.interpolate.griddata),但不确定该怎么做,因为我没有与这些数据点相关的功能。我当时想做的是使用if语句:给定点数组= [x1,y1,z1],[x2,y2,z2]等,如果points [i] [0] -gridpoint1 [0] < 1:如果points [i] [1] -gridpoint1 [1] <1:如果points [i] [2] -gridpoint1 [2] <1,则points [i] = bin1 [i],其中bin1是预制的零数组。但是,我认为我必须针对网格上的每个网格点运行此操作(网格点将位于每个容器的中心),然后找出每个容器中有多少个非零元素,我我也不知道该怎么办。我有一种可以在scipy中使用某种功能来更轻松地完成整个任务的感觉,但是我仍然不确定如何到达那里。在此先感谢您的帮助!     

解决方法

        如果我理解正确,则您具有坐标(x [i],y [i],z [i]),i = 0,...,N-1,并且您想计算出其中有多少个坐标给定的3D立方体网格单元? 这可以使用
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,6)
zgrid = np.linspace(0.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]
    

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...