Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Cреднее в ассоциативном массиве
 
 автор: elenaki   (09.03.2016 в 15:38)   письмо автору
 
 

Есть массив:

Array
(
    [0] => 46
    [1] => 16
    [2] => 944
    [3] => 26
    [4] => 9
    [5] => 618
    [6] => 8
    [7] => 9
    [8] => 432
    [9] => 15
    [10] => 8
    [11] => 398
    [12] => 13
    [13] => 5
    [14] => 385
    [15] => 8
    [16] => 12
    [17] => 545
    [18] => 9
    [19] => 23
    [20] => 691
    [21] => 17
    [22] => 106
    [23] => 2047
    [24] => 75
    [25] => 23
    [26] => 571
    [27] => 10
    [28] => 15
    [29] => 421
    [30] => 13
    [31] => 9
    [32] => 313
    [33] => 8
    [34] => 11
    [35] => 265
    [36] => 13
    [37] => 8
    [38] => 184
    [39] => 5
    [40] => 3
    [41] => 157
    [42] => 6
    [43] => 4
    [44] => 172
    [45] => 3
    [46] => 17
    [47] => 542
    [48] => 23
    [49] => 5
    [50] => 105
    [51] => 1
    [52] => 4
    [53] => 84
    [54] => 2
    [55] => 1
    [56] => 57
    [57] => 2
    [58] => 73
    [59] => 1
)


Ключи - это количество секунд, значения - сколько раз это количество встречается.
Надо: выбрать наиболее часто встречающееся количество секунд. Это - ключ максимального значения [23] => 2047, т.е. 23.
Вывожу
 echo array_search(max($diafora_times),$diafora_times);


Потом требуют среднее время. Сложить все ключи и разделить на их количество?
Не смогла найти функцию подсчета суммы ключей. Делаю array_keys и сразу array_sum. Это оно?


print round(array_sum(array_keys($diafora_times))/sizeof($diafora_times),0)



Потом вывожу частоту вхождения интервалов в % от общего числа.
1"-10": 22.2%,
11"-20": 21.6%,
21"-30": 34.5%,
31"-40": 8.5%,
41"-50": 10.8%,
51"-60": 2.4%,


23 секунды входят в интервал с наибольшим процентом (21"-30": 34.5%,) - это значит, я правильно посчитала?

  Ответить  
 
 автор: cheops   (09.03.2016 в 19:37)   письмо автору
 
   для: elenaki   (09.03.2016 в 15:38)
 

>echo array_search(max($diafora_times),$diafora_times);
Все верно

>print round(array_sum(array_keys($diafora_times))/sizeof($diafora_times),0)
Среднее время разве не по произведению секунд на количество раз нужно считать? Вроде как 23 секунды в 2047 раз чаще встречается, чем 59 секунд, это не нужно учесть?
<?php
// Копия массива $diafora_times
$arr = (new ArrayObject($diafora_times))->getArrayCopy();
// Сумма произведения секунд на количество раз
array_walk($arr, function(&$item$key){ $item $item $key; });
// Среднее время секунд
echo round(array_sum($arr) / array_sum($diafora_times)); // 22
?>

  Ответить  
 
 автор: elenaki   (10.03.2016 в 10:20)   письмо автору
 
   для: cheops   (09.03.2016 в 19:37)
 

Это средневзвешенное получилось? Оно, конечно, точнее. Спасибо.

PS
А с другой стороны - 23 (секунды) тут не число. Т.е. это число, но оно только для обозначения интервала, можно было написать не 23, а "23 секунды" или "время простоя 23". Тогда как умножать?

  Ответить  
 
 автор: elenaki   (15.03.2016 в 13:29)   письмо автору
 
   для: elenaki   (10.03.2016 в 10:20)
 

Запуталась в массивах

Есть список меток времени с указанием кода агента. Там много еще чего есть, но меня интересует только время и код агента.
Из него делаю массив, где ключ - код агента, а значение - разница между соседними метками времени.
Потом из этого массива делаю ассоциативный массив со значениями в качестве ключей и их количествами в качестве значений.
Получаю - 1 секунда встречается 7 раз, 2 секунды встречаются 3 раза и т.д. - по каждому агенту.
Сортирую массив по возрастанию.
Беру только первые 60 значений, интервалы больше минуты меня не интересуют.

Потом эти массивы, где по 60 записей для каждого агента, разбиваю еще раз на 6 массивов по 10 записей, потому что мне надо выбрать среднее по 6 интервалам (1"-10", 11"-20" и т.д.).
Нахожу простое среднее по каждому массиву для каждого агента.
Складываю эти средние по всем агентам и получаю 200%, 398%... Что за фигня?

Или от меня опять требуют невозможного? Мне нужны средние значения интервалов простоя по всем агентам.
Частный случай - когда выбран агент - считается нормально.

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования