Двоичный Марков-К Случайный Генератор - PullRequest
0 голосов
/ 16 декабря 2018

Hello Stackoverflow Community,

В настоящее время я работаю над реализацией энтропийного кодера (MQ-кодер) (оболочка Cython и внутренний исходный код c).Чтобы создать тестовую настройку, я хочу использовать двоичный генератор случайных чисел markov-k, который выводит числовые массивы в качестве входных данных для кодировщика.Какой самый простой способ реализовать такой генератор в python, numpy, scipy или tenorflow?Вероятности перехода p (x | x1, ..., xk) и порядок k должны быть определены.

Заранее спасибо, Меридиус

1 Ответ

0 голосов
/ 16 декабря 2018

FYI: генерируется таблица [256] вероятностей, основанная на битах его (ascii) ввода.

Использование: cat*.c| ./a.out

; -)


#include <stdio.h>

struct cell     {
        unsigned nhit;
        unsigned ones;
        } cells[256] ={{0,0},};

int main(void)
{
unsigned state, newstate, bit,val;

int ch;

for(state=0;    1; ){
        ch=getc(stdin);
        if(ch==EOF)break;
        for(bit=8; bit-- ;state=newstate & 0xff ){
                val= ch & bit? 1: 0;
                if(val) cells[state].ones += 1;
                cells[state].nhit += 1;
                newstate= (state <<1) | val;
                }
        }

for(state=0; state< 256; state++ ){
        if (    cells[state].nhit < 1)continue;
        fprintf(stdout, "%2x: %u / %u (%lf)\n"
                , state
                , cells[state].ones , cells[state].nhit
                , (0.0+cells[state].ones) / cells[state].nhit
                );
        }

return 0;
}

Забавно видеть, что большинство значений 0 или 1;или близко к нему;или около 0,5.

...