필터 지우기
필터 지우기

How can I generate a random vector between 1-9 with 10 numbers and at least one number should be >2.

조회 수: 3 (최근 30일)
X=rand(10,1)*(9-1)+1 How should I change this code to make at least one number >2.

채택된 답변

John D'Errico
John D'Errico 2014년 12월 21일
편집: John D'Errico 2014년 12월 21일
Generate 9 (NINE) random numbers with no constraint from 1:9. Then generate a 10th number that is assuredly greater than 2. Randomly permute the set.
R = [ceil(rand(1,9)*9), ceil(rand*7 + 2)];
R = R(randperm(10));
Easy peasy. If you prefer to use randi, it is just as easy, and perhaps easier to read.
R = [randi([1 9],[1 9]), randi([3,9],1)];
R = R(randperm(10));
The general idea is a common one to be found in probability. If you need one number to have some property, then generate it as such.
Edit: to generate real numbers instead of integers...
R = [rand([1 9])*8 + 1, rand(1)*7 + 2];
R = R(randperm(10));
The basic idea remains the same. Note that the rand function generates a value in the strict open interval (0,1), so the result of our 10th number will never be exactly 2. Thus, that value must always be strictly greater than 2.
  댓글 수: 3
Mustafa
Mustafa 2014년 12월 21일
does instructor mentioned that it must not be integer? I don't remember any necessity about it, right?
John D'Errico
John D'Errico 2014년 12월 21일
편집: John D'Errico 2014년 12월 21일
Sorry. I presumed (incorrectly) that your numbers be integers given a too fast reading of your question. Even so, it is trivial to change to generate real numbers as I show in the edit.

댓글을 달려면 로그인하십시오.

추가 답변 (2개)

Matt J
Matt J 2014년 12월 21일
편집: Matt J 2014년 12월 21일
One way,
X=rand(10,1)*(8-1)+1 +ceil(rand(10,1))

Azzi Abdelmalek
Azzi Abdelmalek 2014년 12월 21일
X=rand(10,1)*8+1;
idx=X>2;
if nnz(idx)==0
X(randi(numel(X)))=7*rand+2;
end

카테고리

Help CenterFile Exchange에서 Creating and Concatenating Matrices에 대해 자세히 알아보기

태그

아직 태그를 입력하지 않았습니다.

Community Treasure Hunt

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

Start Hunting!

Translated by