У меня есть следующий массив:Weighted среднее арифметическое значений подмассив с использованием PHP
$array = array(
array("A",105),
array("B",125),
array("C",325),
array("D",435),
array("A",110),
array("A",115),
array("C",400),
array("D",650),
array("E",750)
);
и хотел бы сделать некоторые операции с ним так же, как следующие:
Первое: группы значений клавишу [ 0], то же самое, поднимите их на 2-ю степень и суммируйте их. Для достижения этой цели я написал следующий код:
$result = array();
foreach ($array as $value){
if (!array_key_exists($value[0], $result)){
$result[$value[0]] = array();
}
$result[$value[0]][] = pow($value[1],2);
}
array_walk($result, create_function('&$v,$k', '$v = array_sum($v);'));
с тем, что у нас есть ожидаемый результат:
Array (
[A] => 36350
[B] => 15625
[C] => 265625
[D] => 611725
[E] => 562500
)
Второе: делить каждую из этих величин по сумме всех их вместе. Другими словами (или лучше в другие номера :-)
Sum of them all: 36350 + 15625 + 265625 + 611725 + 562500 = 1491825
затем, разделение:
[A] 36350/1491825
[B] 15625/1491825
...
[E] 562500/1491825
Так что в конце концов у нас есть что-то вроде этого:
Array (
[A] 0.0243
[B] 0.1047
...
[E] 0.3770
)
я думал в чем-то таком:
array_walk($result, create_function('&$v,$k', '$v = array_sum($v)/count($v);'));
, но потом я понял, что это не правильно, потому что первое значение будет разделено только, сколько раз происходит, второй по вхождений Б и т.д.
Таким образом, мы имели бы:
Array (
[A] => 36350/3 = 12116.666666667
[B] => 15625/1 = 15625
[C] => 265625/2 = 132812.5
[D] => 611725/2 = 305862.5
[E] => 562500/1 = 562500
)
Я Поиск - это своего рода взвешенное среднее арифметическое групповых значений подмассивов.
Буду признателен, если кто-то поможет мне найти ответ на эту проблему.
Большое спасибо заранее.