Eli*_*ens 5 python performance numpy scipy
我有一个 numpy 数组,它代表一个空间体积上的 3d 网格,每个单元格代表一个非立方体素(缩放在所有三个维度上都是任意的)。该阵列是每维 O(500) 体素。
我想用从给定 XYZ 点到每个体素中心的距离填充该数组。
我可以使用 python for-loops填充数组,但这比我想要的要慢。有没有办法使用 numpy/scipy 快速做到这一点?
到 XYZ 坐标的转换是通过两个元组完成的,一个给出0,0,0体素中心的 XYZ 坐标,另一个给出以 XYZ 为单位的体素大小。
使用每个维度的距离创建一个 ogrid,然后计算距离(使用 ogrid 结果正确广播):
import numpy as np
x0, y0, z0 = 10, 10, 10
# assuming each dimension includes 500 points, from 0 to 500, step 1
x, y, z = np.ogrid[0:500, 0:500, 0:500]
distances = np.sqrt((x-x0)**2+(y-y0)**2+(z-z0)**2)
Run Code Online (Sandbox Code Playgroud)
如果您需要为网格包含一些缩放和偏移:
x, y, z = np.ogrid[0:500, 0:500, 0:500]
x, y, z = (x * scale_x + offset_x,
y * scale_y + offset_y,
z * scale_z + offset_z)
distances = np.sqrt((x-x0)**2+(y-y0)**2+(z-z0)**2)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1559 次 |
| 最近记录: |