フィルターのクリア

Generate 0 and 1

52 ビュー (過去 30 日間)
Ronak Sakaria
Ronak Sakaria 2012 年 5 月 9 日
コメント済み: Walter Roberson 2022 年 3 月 22 日
Hi,
How to generate 0 and 1 with equal probability?
I wanna generate sequence like 010101 or 011001 i.e probability of 0 and 1 should be 0.5.
  3 件のコメント
James Tursa
James Tursa 2018 年 8 月 8 日
This is sufficiently different from the original question that I would advise you delete this comment and instead post it as a new Question.
Srik G
Srik G 2022 年 1 月 27 日
I wanna generate sequence like 010101 or 011001 with some sampling time in matlab- simulink blocks. Please suggest the block which can do this job in simulink ?

サインインしてコメントする。

採用された回答

Walter Roberson
Walter Roberson 2012 年 5 月 9 日
round(rand)
or
rand >= 0.5
  4 件のコメント
Katyayani Modi
Katyayani Modi 2017 年 9 月 23 日
He i have one question I want to generate 1's or 0's but 1's will occur 70% of the time with round, ceil, fix, floor function.
Image Analyst
Image Analyst 2017 年 9 月 23 日
To get a specified percentage of 1's, try this:
numberOfElements = 1000; % Whatever.
percentageOfOnes = 70; % Whatever.
numberOfOnes = round(numberOfElements * percentageOfOnes / 100)
% Make initial signal with proper number of 0's and 1's.
signal = [ones(1, numberOfOnes), zeros(1, numberOfElements - numberOfOnes)];
% Scramble them up with randperm
signal = signal(randperm(length(signal)));
% Count them just to prove it
numOnes = sum(signal)

サインインしてコメントする。

その他の回答 (8 件)

Image Analyst
Image Analyst 2012 年 5 月 9 日
Ronak, This will do the trick:
n = 10; % Total length must be even to have even # of 0s and 1s.
numberOfOnes = n/2
% Get a list of random locations, with no number repeating.
indexes = randperm(n)
% Start off with all zeros.
x = zeros(1, n);
% Now make half of them, in random locations, a 1.
x(indexes(1:numberOfOnes)) = 1
  1 件のコメント
Ronak Sakaria
Ronak Sakaria 2012 年 5 月 9 日
thanks buddy

サインインしてコメントする。


Geoff
Geoff 2012 年 5 月 9 日
I wouldn't do this using the double version of rand. While it's not really incorrect to use rand for this, I would use randi instead. Integers are the native data type for random number generation.
This generates an m-by-n matrix of zeros and ones:
x = randi(2,m,n) - 1
There is still a chance, however, that when generating six random numbers they will be all 1, all 0, or anything else where the distribution is not perfect. If you require an equal number of ones and zeros, but scrambled, you could do this:
% By definition, we require an EVEN number for N
N = 6;
x = repmat([0 1], 1, N/2);
% Randomly switch two individual numbers N times.
for t = randi(N, 2, N)
x(t) = x(t([2 1]));
end
[edited: made swap code less C-like]
  5 件のコメント
Walter Roberson
Walter Roberson 2012 年 5 月 9 日
Integers are (nearly always) what underlies uniform random generators. However, other distributions such as rand() may use other methods.
MATLAB does not expose the 32 bit integer generation capability of the Twister algorithm. If I recall, it uses two Twister calls to generate the 53 bit double in rand().
I do not have access to randi() to check, but because it needs to be uniform random over a variable range of integer values (rather than always over a power of 2), fairness considerations usually make it easier to use a double and multiply by the span.
Walter Roberson
Walter Roberson 2012 年 5 月 16 日
I meant to write that randn() may use other methods.

サインインしてコメントする。


Narayan Chaudhary
Narayan Chaudhary 2012 年 5 月 16 日
randerr(1,6,[0 3;0 1])
1x6 matrix with 0 and three non-zero entries with probability of 3 non zero entries being 1 i.e. 0,5 in overall matrix
  1 件のコメント
juan camilo lores acosta
juan camilo lores acosta 2020 年 3 月 18 日
muchas gracias salvaste una vida :)

サインインしてコメントする。


Haoming Mai
Haoming Mai 2018 年 2 月 24 日
Hi
How to generate 0 and 1 with probability of 1/3?
  1 件のコメント
Image Analyst
Image Analyst 2018 年 2 月 24 日
編集済み: Image Analyst 2018 年 2 月 24 日
With randperm
total = 99
numOnes = round(total/3)
r = zeros(1, total); % All zeros to start.
% Now assign a third of them to 1
indexes = randperm(total, numOnes);
r(indexes) = 1
sum(r) % Check to make sure. Should be 33

サインインしてコメントする。


Walter Roberson
Walter Roberson 2018 年 2 月 24 日
編集済み: James Tursa 2018 年 8 月 8 日
A few years after this question was posted, I posted
In which I proved that it is not possible to generate 0 and 1 with exactly equal probability with any of the MATLAB random number generators.

Akira Agata
Akira Agata 2020 年 3 月 18 日
Just FYI:
To evaluate BER (Bit Error Rate) of digital communication system, PRBS (Pseudo Random Binary Sequence) has been commonly used as a test pattern for many years. Since PRBS sequence with length of bits always contains specific number of 1s and 0s (more precisely, 1s and 0s ), maybe you can use this for your purpose.
% For example, the following code generates PRBS sequence of r=4 (15bit length)
pnSequence = comm.PNSequence(...
'Polynomial', [4 3 0],...
'InitialConditions',[0 0 0 1],...
'SamplesPerFrame', 15)
prbsSequence = pnSequence();

Prakash Reddy Pasham
Prakash Reddy Pasham 2022 年 1 月 3 日
I just need the 1D array of zeros and Ones with our required probability of ones.
  1 件のコメント
Walter Roberson
Walter Roberson 2022 年 1 月 3 日
https://www.mathworks.com/matlabcentral/answers/37827-generate-0-and-1#comment_538887 shows how to achieve a specific density of ones -- for example, exactly 33 ones out of 99.
Note that this is not the same as the probability being 33/99 = 1/3 : probability is statistical. For example,
simulations = mean(rand(1000,1000) <= 1/3,1);
min(simulations), max(simulations)
ans = 0.2840
ans = 0.3870
histogram(simulations)

サインインしてコメントする。


Omair Mohammad Ikram
Omair Mohammad Ikram 2022 年 3 月 22 日
編集済み: Image Analyst 2022 年 3 月 22 日
What is the code for generation of a random sequence of bits with a specified probability of p0 of the bit 0?
  3 件のコメント
Omair Mohammad Ikram
Omair Mohammad Ikram 2022 年 3 月 22 日
Thanks alot
Walter Roberson
Walter Roberson 2022 年 3 月 22 日
Do you need probability or do you need a specific number of values in a state? If you need exactly floor(p0*samples) then use randperm like above. If you want probability then
out = rand(1,samples) > p0;
for probability p0 of a 0.
More common would be to specify the probability of a 1, in which case you would typically use <.

サインインしてコメントする。

カテゴリ

Help Center および File ExchangeRandom Number Generation についてさらに検索

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by