Генерация случайной строки из алфавита с определенными вероятностями (проблема с randsrc) - PullRequest
0 голосов
/ 30 декабря 2018

Итак, я знаком с randsrc и могу создавать из случайного алфавита целых чисел с заданными вероятностями.Допустим, у меня есть этот алфавит

alphabet={'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z'};
prob=[0.08167 0.01492 0.02782 0.04254 0.12702 0.02228 0.02015 0.06094 0.06966 0.00153 0.00772 0.04025 0.02406 0.06749 0.07507 0.01929 0.00095 0.05987 0.06327 0.09056 0.02758 0.00978 0.02360 0.00150 0.01974 0.00074];

Обратите внимание: алфавит - это ячейка с размерами 1x26, а prob - двойной массив 1x26.

Я могу создать случайную строку, подобную этой

s = 'abcdefghijklmnopqrstuvwxyz';
%find number of random characters to choose from
numRands = length(s); 
%specify length of random string to generate
sLength = 10;
%generate random string
randString = s(ceil(rand(1,sLength)*numRands));

Проблема с этим способом состоит в том, что я не могу найти способ принять вероятности в учет.Итак, что я пытался сделать, это:

randomString =randsrc(10,1,[alphabet; prob]);

Но это отображается в консоли:

Error using vertcat 
Dimensions of arrays being concatenated are not consistent. 
Consider converting input arrays to the same type before concatenating.

Error in test (line 8) 
randomString = randsrc(10,1,[alphabet; prob]);

В этом случае, если я делаю:

alphabet = [097:122];

randsrc будет работать.

Но что бы я ни пытался, я не могу дать алфавит символов randsrc.Причина, по которой я хочу дать символьный алфавит randsrc, заключается в том, что мой алфавит может быть намного сложнее, чем первый, например:

alphabet = {'aa','ab','ac'...'az','ba','bb','bc'...);

В любом случае я могу заставить randsrc получить алфавит символов ине целое числоИли я должен попытаться создать свою собственную функцию для этого?

Заранее спасибо

1 Ответ

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

Вы можете использовать randsrc для генерации случайных индексов в alphabet:

indices = randsrc(10,1,[1:numel(alphabet); prob]);
randomString = [alphabet{indices}];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...