numpy:如何在盒子内创建网格网格?

问题描述 投票:2回答:1

我有一个具有所有八个角顶点坐标的长方体

(-111.2433, -70.9316, -26.2690)
(-111.2433, -70.9316, 80.8608)
(-111.2433, 71.5288, 80.8608)
(103.3007, 71.5288, -26.2690)
(103.3007, -70.9316, -26.2690)
(103.3007, -70.9316, 80.8608)
(103.3007, 71.5288, 80.8608)

我想在此体积内创建体积为1m x 1m x 1m]的3D体素,并保存其中心坐标。我尝试使用np.meshgrid()进行以下操作。

x_max = -1000000 
y_max = -1000000 
z_max = -10000000
x_min = 1000000 
z_min = 1000000 
y_min = 10000000 
for v in vertices:
    x = v[0] 
    y = v[1]
    z = v[2]
    x_max = max(x_max  ,x)
    x_min = min(x_min , x)
    y_max = max(y_max  ,y)
    y_min = min(y_min , y)
    z_max = max(z_max  ,z)
    z_min = min(z_min , z)
xdim = list(range(int(x_min) , int(x_max) , 1))
ydim =list(range(int(y_min) , int(y_max) , 1))
zdim =list(range(int(z_min) , int(z_max) , 1))
grid  = np.array(np.meshgrid(xdim , ydim , zdim)).T.reshape(3 , -1)

xdimydimzdim是列表,其中包括所有框坐标系中的所有坐标系,np.mehsgrid()基本上取所有这些坐标系的笛卡尔积,从而使我们得到(x , y, z)坐标系看起来像这样的所有体素中心。

array([[-111,  -70,  -26],
       [-111,  -64,  -26],
       [-111,  -57,  -26],
       ...,
       [ 103,   55,   80],
       [ 103,   62,   80],
       [ 103,   71,   80]])

我认为我的实现可能效率低下,所以任何帮助都将有所帮助!

我有一个长方体,其所有八个角顶点坐标(-111.2433,-70.9316,-26.2690)(-111.2433,-70.9316、80.8608)(-111.2433、71.5288、80.8608)(103.3007、71.5288,-26.2690)(103.3007 ,-70 ....

python python-3.x performance numpy 3d
1个回答
1
投票

如果将顶点转换为int64类型的numpy数组,则可以大大简化:

© www.soinside.com 2019 - 2024. All rights reserved.