我有一系列降雨概率,我将其作为预测输出:
$rain_probability = array(
'7am' => '33',
'8am' => '0',
'9am' => '8',
'10am' => '7',
'11am' => '8',
'12pm' => '19',
'1pm' => '8',
'2pm' => '13',
'3pm' => '50',
'4pm' => '50',
'5pm' => '60',
'6pm' => '60',
'7pm' => '7',
'8pm' => '5',
'9pm' => '0'
);
$forecast = 'The likelihood of rain is: ';
foreach( $rain_probability as $hour => $percentage )
{
$forecast .= "$hour: $percentage%. \n";
}
echo $forecast;
下雨的可能性是:
早上7点33% 早上8点0% 上午9点8% 上午10点7% 上午11点8% 中午12点19% 下午1点8%。
下午2点13%。
下午3点50% 下午4点50% 下午5点60% 下午6点60% 晚上7点7% 晚上8点5% 晚上9点0%。
我希望这样做更加人性化,就像这样:
下雨的可能性是:
早上7点:33% 上午8点至11点:不到10% 中午12点:19% 下午1点:8% 下午2点:13% 下午3点至4点:50% 下午5点至下午6点:60% 晚上7点至晚上9点:不到10%。
认为这很简单,所以我开始写一个循环,检查前一小时的概率是否与当前小时相同。然后需要特殊情况下小于10%的数字。然后必须特殊情况下的第一个和最后一个数组元素。很快我就在很多条件语句中,并且(请原谅双关语)代码不再是非常干燥。并且不确定是否存在某些组合或概率序列的错误,并且可以为此设置测试。但整体上开始感觉我可能正在重新发明轮子,也许有更好的方法。
我的问题不是"我怎样才能完成这项工作" - 但是,是否存在经典的方法,模式,甚至是用于解决此问题的类或库? (有点像计算机科学家庭作业)
答案 0 :(得分:2)
它似乎不太复杂,只需要一点点爱......
输入:
$rain_probability = array(
'7am' => '33',
'8am' => '0',
'9am' => '8',
'10am' => '7',
'11am' => '8',
'12pm' => '19',
'1pm' => '8',
'2pm' => '13',
'3pm' => '50',
'4pm' => '50',
'5pm' => '60',
'6pm' => '60',
'7pm' => '7',
'8pm' => '5',
'9pm' => '0'
);
方法(Demo):
array_walk($rain_probability,function(&$v){$v=($v<10)?'Less than 10%.':"$v%.";}); // prep %
$forecast="The likelihood of rain is:\n";
$start=$end=$perc='';
foreach($rain_probability as $hour=>$percent){
if($perc==$percent){ // merge forecast line
$end="-{$hour}";
$perc=$percent;
}else{ // start new forecast line
if($start){$forecast.="$start$end: $perc\n";} // skip on first iteration
$start=$hour;
$end='';
$perc=$percent;
}
}
$forecast.="$start$end: $perc"; // add final forecast line
echo $forecast;
输出:
The likelihood of rain is:
7am: 33%.
8am-11am: Less than 10%.
12pm: 19%.
1pm: Less than 10%.
2pm: 13%.
3pm-4pm: 50%.
5pm-6pm: 60%.
7pm-9pm: Less than 10%.
答案 1 :(得分:1)
也许这会有所帮助https://github.com/php-ai/php-ml
如果我理解正确,您需要k-means