我试图标记一些趋势,所以我将 1 作为最低值,将 5 作为最大值。
例如,
我可能有以下情况:
5,4,5,5 (UP)
3,4, (UP)
4,3,3 (DOWN)
4,4,4,4, (FLAT - this is OK for all same numbers)
我计划将无限数量的有序值作为输入,作为输出我将只显示 (UP)、(DOWN) 或 (FLAT) 图像。
关于如何实现这一点有什么想法吗?
对不起,如果我的描述不够。
谢谢大家的宝贵时间。
最佳答案
使用最小二乘拟合计算值的“斜率”。
function leastSquareFit(array $values) {
$x_sum = array_sum(array_keys($values));
$y_sum = array_sum($values);
$meanX = $x_sum / count($values);
$meanY = $y_sum / count($values);
// calculate sums
$mBase = $mDivisor = 0.0;
foreach($values as $i => $value) {
$mBase += ($i - $meanX) * ($value - $meanY);
$mDivisor += ($i - $meanX) * ($i - $meanX);
}
// calculate slope
$slope = $mBase / $mDivisor;
return $slope;
} // function leastSquareFit()
$trend = leastSquareFit(array(5,4,5,5));
(未经测试)
如果斜率为正,趋势向上;如果为负,则为向下。使用您自己的判断来决定什么边距(正或负)被视为持平。
关于php - 如何根据一些值来定义趋势?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8531708/