iT邦幫忙

0

php 產生總和為1的數值陣列,且指定小數精度

  • 分享至 

  • xImage
  •  

如題:
輸入:
$num 要產生的數值數量 (正整數) 預設為2個
$precision 決定小數下幾位 (正整數) 預設精度為小數下6位

輸出:
$weightarray $num個元素,總和為1的陣列 (實數陣列)

function weight_array($num = 2, $precision = 6){
    $min = 0;
    $max = pow(10, $precision);
    $weightarray = [];
    $sum_temp = 0;
    //若只有一個元素,權重為1
    if($num == 1){
        $weightmatrix[0] = 1;
    }else{
        for($i=0;$i<($num-1);$i++){
            array_push($weightarray, rand(0, $max));
            $max = $max-$weightarray[$i];
            $sum_temp += $weightarray[$i];
        }
        //保證產出的陣列,數值總和必為1
        if(($num-1)>0){
            $last = pow(10, $precision) - $sum_temp;
            array_push($weightarray, rand($last, $last));
        }
        //將陣列內的整數數值轉成小數點後6位
        $sum_temp = 0;
        for($i=0;$i<($num);$i++){
            $weightarray[$i] /= pow(10, $precision);
            $sum_temp += $weightarray[$i];
        }
    }
    //避免產出的權重第一個都很重,因此加入一個洗牌的過程
    shuffle($weightarray);
    return $weightarray;
}

圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言