- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一组坐标表示许多对象的 3d 位置。这些点取自 3-d 立方体的模拟。我需要做的是在立方体上制作一个 3d 网格,然后将这些点分配到它们在网格上的正确位置,这样我就可以找到网格每个部分中对象的密度。例如,我一直在搜索插值和网格文档(http://docs.scipy.org/doc/scipy/reference/generated/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是预制的零数组。但是,我想我必须为网格上的每个网格点运行它(网格点将位于每个 bin 的中心),然后找出每个 bin 中有多少非零元素,我就是也不知道怎么办。我有一种感觉,我可以使用 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, 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]
关于Scipy 中的 3d 插值——密度网格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6359709/
我是一名优秀的程序员,十分优秀!