Php 概率分布函数
有人知道概率分布函数吗 假设我有一个数组:Php 概率分布函数,php,statistics,probability,Php,Statistics,Probability,有人知道概率分布函数吗 假设我有一个数组: $arr = array( 'A' => 100, 'B' => 200, 'C' => 300, 'D' => 400 ); 我希望函数输出类似于A=97、B=203、C=312、D=388的内容,而不必进行1000次迭代。有什么想法吗?以前有人这样做过。跟着图坦卡蒙走,这帮了我的忙 以下是我的看法: <?php class WeightedRandom { private
$arr = array(
'A' => 100,
'B' => 200,
'C' => 300,
'D' => 400
);
我希望函数输出类似于A=97、B=203、C=312、D=388的内容,而不必进行1000次迭代。有什么想法吗?以前有人这样做过。跟着图坦卡蒙走,这帮了我的忙 以下是我的看法:
<?php
class WeightedRandom
{
private $generated;
private $weights;
private $items;
public function __construct( array $weights, array $items )
{
$this->weights = $weights;
$this->items = $items;
}
public function RandomNumber( int $min, int $max )
{
return mt_rand() * ( $max - $min ) + $max;
}
public function Generate()
{
$totalWeight = array_sum( $this->weights );
$randomNum = $this->RandomNumber(0, $totalWeight);
$weightSum = 0;
$itemCount = count($this->items);
$item;
$i;
for ( $i = 0; $i < $itemCount; $i++ )
{
$weightSum += $this->weights[$i];
if ( $randomNum <= $weightSum )
{
$item = $this->items[$i];
break;
}
}
return $item;
}
/*
public function Generate()
{
$weightedList = [];
$multiples;
$i;
$j;
$weightCount;
for( $i = 0; $i < $weightCount; $i++ )
{
$multiples = $this->weights[$i] * 10;
for( $j = 0; $j < $multiples; $j++)
{
array_push($weightedList, $this->items[$i]);
}
}
return $weightedList;
}
*/
}
?>
数组是$image,
$Lg是离散可能值的数目
$n_element=count($image);
$cdf_array=array_fill(0,$Lg,0);
for($i=0;$i<$n_element;$i++){
$cdf_array[$image[$i]-1]=$cdf_array[$image[$i]-1]+1;
}
$cdf_array=array_filter($cdf_array,function($var){return $var!=0;});
$keys=array_keys($cdf_array);
$cdf_min=$cdf_array[$keys[0]];
$not_null_el=count($keys);
for($i=0;$i<$not_null_el;$i++){
$cdf_array[$keys[$i]]=array_sum(array_chunk($cdf_array,$i+1,1)[0]);
}
}
虽然这个答案在理论上可以回答这个问题,但在这里包括答案的基本部分,并提供链接供参考。本教程对他/她来说是有教育意义的,因为它使用了两种方法,并且是js而不是php。我是为他/她做所有的工作,还是让他遵循图坦卡蒙并自己实施?更新了它。真的否决票了吗?没有看到你们中的任何人自己发布答案。很抱歉,此代码只返回1项。我正在寻找所有返回的项目,而不必进行1000次迭代。您无法避免多次迭代。对于任何给定的集合,它只进行一次计算。据我所知,对于任何给定的集合,无需迭代即可获得所需的效果。