Я выполняю упражнения в «Программирование коллективного интеллекта», но я использую JavaScript. У меня проблемы с алгоритмом Корреляции Пирсона. Вот функция:Функция корреляции Pearson, возвращающая Nan
function rec(object1, object2) {
var sum1 = 0;
var sum2 = 0;
var squareSum1 = 0;
var squareSum2 = 0;
var productsSum = 0;
var i;
var commonKeys = commonProperties(object1, object2);
for (i = 0; i >= commonKeys.length; i += 1) {
sum1 += object1[commonKeys[i]];
sum2 += object2[commonKeys[i]];
squareSum1 += Math.pow(object1[commonKeys[i]], 2);
squareSum2 += Math.pow(object2[commonKeys[i]], 2);
productsSum += object1[commonKeys[i]] * object2[commonKeys[i]];
}
var num1 = productsSum - (sum1 * sum2/commonKeys.length);
var num2 = Math.sqrt((squareSum1 - (Math.pow(sum1, 2)/commonKeys.length)) * (squareSum2 - (Math.pow(sum2, 2)/commonKeys.length)));
return num1/num2;
}
Полный JSFiddle является here. Я запускаю его через JSLint, поэтому он может быть немного грязным. Кто-нибудь знает, что случилось?
num1 является 0, num2 0 и 0/0 = NaN –
Вы получаете NaN потому num2 0. Это не разрешено делить на ноль – andreasnico
Вы никогда не войти в цикл, как ' i
Jaco