A question about matrix
5 views (last 30 days)
Show older comments
By following codes, I get a 50x50 matrics with randon 1 and 0. Now I want to specify how many 1 and how many 0 are in this 50x50 matrics, and I want them in randon positions.
Thank you very much for your helps!
nside=50;
randworld=round(rand(nside,nside));
world=randworld>.5;
0 Comments
Accepted Answer
Image Analyst
on 8 Dec 2019
Use randperm:
nside=50;
world = zeros(nside, nside);
num1sToInsert = 4;
randomIndexes = randperm(numel(world), num1sToInsert)
world(randomIndexes) = 1
4 Comments
Image Analyst
on 8 Dec 2019
Edited: Image Analyst
on 8 Dec 2019
Johnny, recall you said "I want to specify how many 1 and how many 0 are", and if you look in the documentation for randperm, the second argument is the number of numbers you want to get and assign 1 to. For example if you have 50-by-50 matrix, then there are 2500 elements in that matrix. So randperm will get a scrambled array of every index from the upper left (index 1) to the lower right (index 2500) - basically all numbers from 1 to 2500 scrambled up, if you don't specify the second argument. If you DO specify a second argument, then it won't return all 2500 - we don't need all 2500 - it will return however many you ask for in the second argument. So let's say you wanted to have 4 1's and 2496 0's. Well
randomIndexes = randperm(numel(world), num1sToInsert)
will return exactly 4 indexes randomly located somewhere within those 2500 elements. This is basically the same as
randomIndexes = randperm(2500, 4) % Return 4 numbers chosen randomly between 1 and 2500.
Then I use those indexes to set the matrix at those indexes to 1.
More Answers (0)
See Also
Categories
Find more on Loops and Conditional Statements in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!