我有一个字典,其中一个单词是大小为100的向量的键; 和一个向量(大小也为100)。 如何获得最接近于myVector的字典键(在欧几里得距离的意义上)?
我已经开始手工实现一个实现,以计算myVector和myDict的每个向量之间的欧几里得距离,并保持最小值,但是我担心这样的效率极低(myDict非常大),我认为可能此类功能的内置实现。
var myDict = {
"a":[-0.03,-0.24,0.72,...0.39,0.08,0.04],
"b":[-0.10,0.11,0.59,...-0.54,0.67,0.10],
"c":[-0.67,0.53,0.12,...0.61,-0.96,0.63],
"d":[-0.76,0.05,0.81,...-0.36,0.39,0.66]
}
myVector = [0.10,-0.20,0.80,...0.60,-0.40]
(我不希望使用外部库)
答案 0 :(得分:0)
您可以使用Math.hypot
来获得距离,并获得距离最小的那个。
var dict = { a: [-0.03, -0.24, 0.72, 0.39, 0.08, 0.04], b: [-0.10, 0.11, 0.59, -0.54, 0.67, 0.10], c: [-0.67, 0.53, 0.12, 0.61, -0.96, 0.63], d: [-0.76, 0.05, 0.81, -0.36, 0.39, 0.66] },
vector = [0.10, -0.20, 0.80, 0.60, -0.40],
hypot = Math.hypot(...vector),
closest = Object.keys(dict).reduce((a, b) =>
Math.abs(hypot - Math.hypot(...dict[a])) < Math.abs(hypot - Math.hypot(...dict[b])) ? a : b);
console.log(closest);