PHP Conference Japan 2024

stats_covariance

(PECL stats >= 1.0.0)

stats_covariance計算兩個資料集的共變異數

說明

stats_covariance(array $a, array $b): float

傳回 ab 的共變異數。

參數

a

第一個陣列

b

第二個陣列

傳回值

傳回 ab 的共變異數,或在失敗時傳回 false

新增註解

使用者貢獻的註解 2 則註解

Angel J. Salinas
8 年前
// kanniprabu 的函式是錯的。
// 您可以使用 Excel 的 COVARIANCE.P 函式來檢查此函式

function getCovariance( $valuesA, $valuesB )
{
$countA = count($valuesA);
$countB = count($valuesB);
if ( $countA != $countB ) {
trigger_error( '陣列大小不同:countA='. $countA .', countB='. $countB, E_USER_WARNING );
return false;
}

if ( $countA < 0 ) {
trigger_error( '空陣列', E_USER_WARNING );
return false;
}

// 如果有可用的函式庫函式,則使用
if ( function_exists( 'stats_covariance' ) ) {
return stats_covariance( $valuesA, $valuesB );
}

$meanA = array_sum( $valuesA ) / floatval( $countA );
$meanB = array_sum( $valuesB ) / floatval( $countB );
$add = 0.0;

for ( $pos = 0; $pos < $countA; $pos++ ) {
$valueA = $valuesA[ $pos ];
if ( ! is_numeric( $valueA ) ) {
trigger_error( '陣列 A 中位置 '. $pos . ' 的值不是數值,值為='. $valueA, E_USER_WARNING );
return false;
}

$valueB = $valuesB[ $pos ];
if ( ! is_numeric( $valueB ) ) {
trigger_error( '陣列 B 中位置 '. $pos . ' 的值不是數值,值為='. $valueB, E_USER_WARNING );
return false;
}

$difA = $valueA - $meanA;
$difB = $valueB - $meanB;
$add += ( $difA * $difB );
} // for

return $add / floatval( $countA );
}
kanniprabu at gmail dot com
11 年前
<?php
// 共變異數計算
function standard_covariance($aValues,$bValues)
{
$a= (array_sum($aValues)*array_sum($bValues))/count($aValues);
$ret = array();
for(
$i=0;$i<count($aValues);$i++)
{
$ret[$i]=$aValues[$i]*$bValues[$i];
}
$b=(array_sum($ret)-$a)/(count($aValues)-1);
return (float)
$b;
}
$aValues=array(3,4,5,7);
$bValues=array(10,11,13,14);
echo
standard_covariance($aValues,$bValues);
?>
To Top