如何在Julia中使用map计算元组与向量内各元组的欧氏距离?
问题原因及解决方法
你的代码只返回2个结果,是因为map函数会并行遍历传入的所有可迭代对象,当其中一个迭代对象耗尽时就停止计算。你传入的(3,3)是长度为2的元组,而tups是包含3个元素的向量,所以map仅处理前2组配对,得到2个结果。
下面是两种正确的实现方式:
方法一:直接在匿名函数中使用固定目标元组
这种方式最简洁,让map只遍历tups,每个元素都和固定的(3,3)计算欧氏距离:
tups = [ (1, 3), (11, 2), (0, 1) ]; map(x -> √(sum((x .- (3, 3)).^2)), tups)
执行后会返回包含3个结果的向量:
3-element Vector{Float64}: 2.0 8.06225774829855 3.605551275463989
方法二:重复目标元组以匹配tups的长度
如果你坚持使用双参数的匿名函数,可以用Iterators.repeat把(3,3)重复成和tups长度一致的迭代器,确保两个可迭代对象长度匹配:
using Iterators tups = [ (1, 3), (11, 2), (0, 1) ]; map((x, y) -> √(sum((x.-y).^2)), tups, Iterators.repeat((3,3), length(tups)))
这种方式同样会得到3个正确的距离结果。
内容的提问来源于stack exchange,提问作者Shayan
相关产品推荐
相关产品推荐

