MATLAB Answers

Creating a Matrix of random numbers

3 views (last 30 days)
I'm trying to create a 20x20 matrix of values either -1 or 1, but randomly assigned. How can i do this? I've tried using the randi function but it returns the numbers as a range from -1 1 and so includes 0. any help would be appreciated

  0 Comments

Sign in to comment.

Accepted Answer

Steven Lord
Steven Lord on 21 Nov 2020
possibleValues = [-1, 1];
desiredSize = [5 6];
A = possibleValues(randi(numel(possibleValues), desiredSize))
A = 5×6
-1 1 1 1 1 -1 -1 -1 1 1 -1 -1 -1 -1 -1 1 -1 -1 1 1 -1 1 1 -1 -1 1 -1 1 1 -1
This assumes you want -1 and 1 to be equally likely. If you need an exact number of each possible value:
elements = [repmat(-1, 1, 5), repmat(1, 1, 25)];
order = randperm(numel(elements));
shuffled = reshape(elements(order), desiredSize)
shuffled = 5×6
1 -1 1 1 1 1 1 1 1 1 -1 1 1 1 -1 1 1 1 -1 1 1 1 1 1 -1 1 1 1 1 1
If you need the two numbers not to be equally likely (say 1 three times as likely as -1) there are ways to do this as well.

  1 Comment

Blair Hail-Brown
Blair Hail-Brown on 22 Nov 2020
Absolutely perfect, thank you so much!

Sign in to comment.

More Answers (3)

John D'Errico
John D'Errico on 21 Nov 2020
randi([0 1],20)*2 - 1

  0 Comments

Sign in to comment.


David Hill
David Hill on 21 Nov 2020
(-1).^randi(2,20);

  0 Comments

Sign in to comment.


Bastian Arturo Romero Mardones
A long way
bits= randi([-1 1],20,20);
[r,c,~] = size(bits);
count = 1;
while count < (r*c)+1
bits = reshape(bits,[1 r*c]);
if(bits(count) == 0)
bits(count) = randi([-1 1],1);
count = 1;
else
count = count + 1;
end
end
bits = reshape(bits,[r c]);

  0 Comments

Sign in to comment.

Community Treasure Hunt

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

Start Hunting!