使用php查找数据数组的方差
我想找出值的方差,但找不到正确的均值。我添加了explode,因为在获取数组_sum()时,它显示了一个错误,即数组_sum()希望参数1为数组,字符串为给定的使用php查找数据数组的方差,php,Php,我想找出值的方差,但找不到正确的均值。我添加了explode,因为在获取数组_sum()时,它显示了一个错误,即数组_sum()希望参数1为数组,字符串为给定的 <html><body> <?php $ap = '36.222.198.197.166.140'; $counte =0;$sum=0; $file_handle = fopen("results.csv", "r"); while ( $line_of_text = fgetc
<html><body>
<?php
$ap = '36.222.198.197.166.140';
$counte =0;$sum=0;
$file_handle = fopen("results.csv", "r");
while ( $line_of_text = fgetcsv($file_handle)){
if ($line_of_text[2] == $ap) {
$counte++;
$van = explode(" ",$line_of_text[3]);
$fMean = array_sum($van) / count($van);
print_r ($van);
}
}
fclose($file_handle);
?>
</body></html>
您的数据不一致:
- 前两行有逗号作为分隔符,而其他行没有
- 第二行有一个以点结尾的IP地址
explode(“,$line_of_text[3])
毫无意义,因为$line\u of_text[3]
是一个数字,而不是带有空格的东西。在这个结果上使用count
也是没有意义的,因为您想要计算行数,而不是其中一个字段中的某个内容
以下是更正的版本:
$ap = '36.222.198.197.166.140';
$file_handle = fopen("results.csv", "r");
while ( $line_of_text = fgetcsv($file_handle)){
if ($line_of_text[2] == $ap) $van[] = $line_of_text[3];
}
fclose($file_handle);
$fMean = array_sum($van) / count($van);
然后按如下方式计算方差:
$variance = array_sum(array_map(function ($x) use ($fMean) {
return pow($x - $fMean, 2);
}, $van)) / count($van);
你为什么要在第三场爆炸?这只是一个数字……我不确定你在第四列中解释了什么,例如在你的csv的最后一行,你有
-74
,-66
是-66
在2.4_thresh
列中还是5_thresh
?第2列第1行是36.222.198.197.166.140我想计算它在csv中出现了多少次,但每一次当它只是显示111时,应该是计数3,但显示111。我正在数组中转换。但是为什么要在循环中执行array\u sum
?您需要首先构建所有值的数组,并在该数组上循环后求和。我在循环中执行,因为我必须在方差计算时使用$van或数组,因为对于方差,我使用$fVariance+=pow($line\u of_text[3]-$fMean,2);如果您在尚未确定平均值的情况下尝试计算方差,那么这将是一个错误的计算:为了知道平均值,您需要首先完成循环的所有迭代。在那之前你没有一个有效的平均数。你检查过我发布的代码了吗?谢谢,我知道我需要先找到fMean,这就是为什么我也在方差中使用它。但是如果($line_of_text[2]==$ap)在这种情况下,如果我需要找到$ap在csv中出现的次数,但我无法找到该计数值。计数($van)这一个。你测试过我提供的解决方案吗?您只需在循环后执行count($var)
。我觉得你根本没看过我的答案。。。
$variance = array_sum(array_map(function ($x) use ($fMean) {
return pow($x - $fMean, 2);
}, $van)) / count($van);