首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >用距离点的距离填充numpy数组的最快方法

用距离点的距离填充numpy数组的最快方法
EN

Stack Overflow用户
提问于 2017-01-25 20:01:52
回答 2查看 1.9K关注 0票数 5

我有一个numpy数组,它表示一个空间体积上的三维网格,每个单元格代表一个非立方体素(缩放在所有三个维度上都是任意的)。每个维的数组是O(500)体素。

我想用从给定的XYZ点到每个体素中心的距离填充这个数组。

我可以使用python for-loops填充数组,但这比我想要的要慢。有没有办法这么快地使用numpy/scipy?

对XYZ坐标的转换由两个元组完成,一个元组给出0,0,0体素中心的XYZ坐标,另一个元组给出XYZ单元中体素的大小。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-01-25 20:09:24

创建一个包含每个维度中的距离的ogrid,然后计算出该距离(使用ogrid结果正确广播):

代码语言:javascript
运行
复制
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)

如果您需要为网格包括一些缩放和偏移量:

代码语言:javascript
运行
复制
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)
票数 7
EN

Stack Overflow用户

发布于 2017-01-25 20:09:09

您可以创建三个一维数组,表示三维数组的扁平X、Y和Z坐标。

然后,使用numpy方法对整个数组执行低功耗计算:

代码语言:javascript
运行
复制
D = numpy.sqrt(numpy.power(X - x_center, 2) + 
               numpy.power(Y - y_center, 2) + 
               numpy.power(Z - z_center, 2))

最后,将数组重塑为原始形状。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41860623

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档