У меня есть набор данных, который выглядит следующим образом (Original данные here):Вычислить ближайший евклидово расстояние с JavaScript
var irisjson = [
{"sepalLength": 5.1, "sepalWidth": 3.5, "petalLength": 1.4, "petalWidth": 0.2, "species": "setosa"},
{"sepalLength": 4.9, "sepalWidth": 3.0, "petalLength": 1.4, "petalWidth": 0.2, "species": "setosa"},
{"sepalLength": 4.7, "sepalWidth": 3.2, "petalLength": 1.3, "petalWidth": 0.2, "species": "setosa"}....]
Я хочу, чтобы рассчитать евклидово расстояние и найти ближайшие точки. Функция я написал следующим образом:
function findClosest(irisjson){
var result = [];
//Calculate Euc. Dist
for(var i=0; i < irisjson.length; i++){
for(var j = 1; j < irisjson.length-1 ; j++){
var a1, a2 , a3 , a4 ;
a1 = irisjson[i].sepalLength -
irisjson[j].sepalLength;
a2 = irisjson[i].sepalWidth -
irisjson[j].sepalWidth;
a3 = Math.pow(a1, 2);
a4 = Math.pow(a2, 2);
result[i] = Math.sqrt(a3 + a4);
}
console.log(result[i]);
}
}
Когда я распечатать результат на консоль, я вижу 1.1045361017187265
в первой строке. Однако, когда я вручную проверить его, как следует, я вижу результат 0.5385164807134502
:
a1 = irisjson[0].sepalLength -
irisjson[1].sepalLength;
a2 = irisjson[0].sepalWidth -
irisjson[1].sepalWidth;
a3 = Math.pow(a1, 2);
a4 = Math.pow(a2, 2);
result = Math.sqrt(a3 + a4);
console.log("res:", result);
Любые идеи о том, почему я получаю разные результаты?
Я был бы признателен за любую помощь, Спасибо!
Я получаю ожидаемые результаты - см .: https://jsfiddle.net/stvsg0we/. Тем не менее, вы не ошибаетесь, переписывая предыдущие результаты по результату линии [i] = Math.sqrt (a3 + a4); '? –
Вы правы @JosephRedfern, он печатает правильные результаты для трех строк кода JSON. Но у меня есть более длинный список, и он не печатает правильные результаты. Возможно, это связано с чрезмерным написанием вы упомянули. Но я не мог понять. Можете ли вы попытаться объяснить больше? Большое спасибо! – supaplex
Можете ли вы обновить свой вопрос, чтобы добавить немного больше данных, чтобы проблемы были более легковоспроизводимыми? –