@jamesStr

Как написать функцию вычисления частоты появления цифры в ряду?

Есть рандомный ряд нулей где с рандомными интервалами вкрапляются цифры 1. К примеру [0, 0, 1, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0]

Подскажите как написать функцию вычисления частоты появления цифры 1. Т.е к примеру единица встречается в среднем каждые 2 позиции, каждые 5 позиций, каждые 1.5 позиции и т.д.
Для ряда [0, 1, 0, 1, 0, 1, 0, 1] частота равна 2 (единица на каждой второй позиции), но нужно вычислять среднюю частотность для рандомного ряда с разными интервалами между 1.

Возможно есть какая то формула, либо подскажите примерный код, без разницы на каком ЯП, можно на псевдокоде даже
  • Вопрос задан
  • 361 просмотр
Пригласить эксперта
Ответы на вопрос 4
Griboks
@Griboks
На питоне такое сделать весьма просто.
len(x)/x.count(1)
Ответ написан
Комментировать
fox_12
@fox_12
Расставляю биты, управляю заряженными частицами
Если понял правильно:
from typing import Optional

def freq(arr: list, digit: int = 1) -> Optional[float]:
    count = 1
    res = []
    for x in arr:
        if x == digit:
            res.append(count)
            count = 0
        count += 1
    try:
        return sum(res) / len(res)
    except ZeroDivisionError:
        return None

a = [0, 0, 0, 0, 1, 0, 0, 0, 0, 1]
print(a, ' --> ', freq(a))

a = [0, 0, 1, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0]
print(a, ' --> ', freq(a))

# [0, 0, 0, 0, 1, 0, 0, 0, 0, 1] --> 5.0
# [0, 0, 1, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0] --> 3.142857142857143
Ответ написан
Комментировать
ProgrammerForever
@ProgrammerForever
Учитель, автоэлектрик, программист, музыкант
let arr = [0, 0, 1, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0];

let p1 = arr.reduce((acc,val)=>acc+=val,0)/arr.length; // вероятность встретить 1
let p0 = 1 - p1; // вероятность встретить 0

let ratio10 = p1/p0; // Соотношение единиц к нулям
let ratio01 = p0/p1; // Соотношение нулей к единицам
Ответ написан
Комментировать
@ikutin666
вот на js
const getPeriodicity=(arr)=>
{
  let counter=0;
  let summ=0;
  let len=0
  for(let i in   arr)
  {
    let e=arr[i];
    
    if(e===1)
    {
      counter+=2;
    }
    else if(+i!==0){
      summ+=counter;
      len++;
      counter=0;
    }
  }
  return summ/len;
}
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы