# Generating random number between 1 to 10

870 views (last 30 days)
Aftab Ahmed Khan on 1 Jul 2014
Answered: Elias Gule on 2 Jul 2014
Hi everyone,
I want to generate a random number between 1 to 10 for 10 loop iteration, with this code section of mine but i want that each time it generate a different number. Forexample if 2 is generated for the 1st loop iteration, then for the rest of 9 iteration. It won't generate 2 again. Similarly for the rest of other numbers between 1 to 10.
for i=1:10
r = (b-a)*rand(1) + a
end

dpb on 1 Jul 2014
Edited: dpb on 1 Jul 2014
That's "sampling w/o replacement". One relatively simple way--
N1=1; N2=10; % range desired
p=randperm(N1:N2);
for i=N1:N2
r=p(i);
...
ERRATA
As noted, in comment, forgot there isn't such a form for randperm. Seems like reasonable enhancement altho it's easy enough to scale externally, too.
Use
N=10; % range desired
p=randperm(N);
for i=1:N

Aftab Ahmed Khan on 1 Jul 2014
Thank you for the response.
but this give me an error of this, Attempted to access p(2); index out of bounds because numel(p)=1.
a=1;
b=10; % range desired
p = randperm(a:b);
for i = a:b
r = p(i);
end
Aftab Ahmed Khan on 1 Jul 2014
Ok thanks, i solved it.
dpb on 1 Jul 2014
Ewww...mea culpa. I was thinking there was a vector version of inputs to randperm to move the range from the default 1:N to N1:N2 but there isn't. Was trying to generalize.
N=10;
p=randperm(N);
for i=1:N
...
If you do need integers from other than 1:N, scale the resulting array as needed.

Jos (10584) on 2 Jul 2014
In matlab you can directly loop over a vector (no need for indexing)
V = randperm(10) % example vector
for x = V
% x will iterate over the values of V
disp(x)
end

Elias Gule on 2 Jul 2014
N = 10; % size of the array
numArray = randperm(N); % array containing integers ranging from 1 : N
for k = numArray
%%perform some calculation/process
doSomething(k);
end