gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 08:30:09 27 4
gpt4 key购买 nike

我有一组坐标表示许多对象的 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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com