2013-04-17 8 views
12

における単一の数字を除いて1と10の間の乱数を生成し、私は例randi([1,10])のために使用して1と10の間の乱数を生成したいと思いますが、私は、単一の番号を除外したいと思い、7を言う - この数bという変数で常に変更され指定されます。にMathWorks社のMATLAB

が可能で何とかやっていることですか?

+0

結果が 'b'と等しくないようになるまで' Randi([1,10]) 'をループするだけです。 –

+0

はい、これはプログラム内で起こりますが、私はこれを監督するつもりはありません。私はbを省略した議論を探しています。 – user1723765

+2

@ user1723765ループとテストは自動化できます。 1は、x = V(ランディ(numelの(V))) 'を使用することができます第二の溶液のために – glglgl

答えて

18

使用randsample。例えば、7を除く、1と10の間の数を生成するために、次の操作を行います。ここ

b = 7; 
x = randsample(setdiff(1:10, b), 1); 

setdiffベクター1:10からbの値を除外するために使用されます。

あなたはStatistics Toolboxには、インストールされていない場合は、randsampleを使用することができるので、randを使用しません:統計ツールボックスのないものについては

v = setdiff(1:10, b); 
x = v(ceil(numel(v) * rand)); 
+2

;' –

+1

@MohsenNosratiniaはい、あなたは正しいです。しかし、古いバージョンのMATLABには 'randi'がないことにも留意してください。 –

+2

まあ、 'randi'はR2008bに登場し、私は統計ツールボックスを持っていない人の数が、5年以上古いバージョンでそれを持っている人よりもway拡大していると思います。 –

5

b = 7; 
pop = 1:10; 
pop(b) = []; 

次に

pop(randperm(9,1)) 

またはn ra集団からndom整数:

pop(randi(numel(pop), 1, n)) 
+1

繰り返しをしたくない場合、 'randperm'は大丈夫です。 –

+1

@EitanTあなたは正しいです! 'randi' – Dan

+2

+1に変更しますが、' 9'を 'length(pop)'に変更します。 – glglgl

1

@EitanTが述べたように、あなたがそうするようにrandsampleを使用することができますが、私は簡単な方法でそうすることがあなたのために行うべきであると思う:

>> b = 7; 
>> randsample([1:b-1,b+1:10],1) 

この単純サンプル@EitanTが述べたように、 `randsample」機能が利用できない場合、ここで、

1  2  3  4  5  6  8  9 10 

または同様になりアレイ[1:b-1,b+1:10]からランダムな値を、

v = [1:b-1,b+1:10]; 
x = v(ceil(numel(v) * rand)); 
+0

b = 1またはb = 10の場合はどうなりますか? –

関連する問題