python - 不同形状阵列的numpy距离计算
问题描述
不确定我的标题是否正确,但基本上我有一个参考坐标,格式为 (x,y,z),还有一个大的坐标列表/数组也采用该格式。我需要得到每个之间的欧几里得距离,所以理论上使用 numpy 和 scipy 我应该能够执行以下操作:
import numpy, scipy.spatial.distance
a = numpy.array([1,1,1])
b = numpy.random.rand(20,3)
distances = scipy.spatial.distance.euclidean(b, a)
但是我没有得到一个数组,而是得到一个错误:ValueError: Input vector should be 1-D.
不知道如何解决这个错误并得到我想要的,而不必求助于循环等,这有点违背了使用 Numpy 的目的。
从长远来看,我想使用这些距离来计算真值掩码,以计算箱中的距离值。
我不确定我只是使用了错误的功能还是使用了错误的功能,我无法在文档中找到可以更好地工作的任何内容。
解决方案
编写自己的函数来执行此操作实际上并不难 - 这是我的,欢迎您使用。
如果您在大量点上执行此操作并且速度很重要,我猜这个函数将在很长一段时间内击败基于 for-loop 的速度解决方案 - numpy 被设计为在整体上执行操作时高效矩阵。
import numpy
a = numpy.array([1,1,1])
b = numpy.random.rand(20,3)
def euclidean_distances(ref_point, co_ords_array):
diffs = co_ords_array - ref_point
sqrd_diffs = numpy.square(diffs)
sum_sqrd_diffs = numpy.sum(sqrd_diffs, axis = 1)
euc_dists = numpy.sqrt(sum_sqrd_diffs)
return euc_dists
推荐阅读
- android - React 本机应用程序仅在发布版本时崩溃
- javascript - 这两个javascript代码片段有什么区别?
- c# - 在 Word 自动化中实现文本行的快捷方式
- javascript - 跨域跟踪谷歌分析
- ios - UITableView、UICollectionView 滚动到顶部
- javascript - 如何使用 Mapbox 的集群设置 reduce 选项?
- android - 无法滚动我的 LinearLayout
- android - 如何获取像这样的 UsageStats 数据并像这样查看?
- reactjs - 从 react.js 源代码生成序列图的工具
- ruby - 从 Golang 帖子中获取 cookie