随机分散数组中的数字

时间:2014-02-25 15:14:27

标签: matlab random

我试图在MATLAB数组中随机分散不同的数字:

我有两个3,四个2,我想随机填充一个矢量(大小为10,1)。

最终结果如下:

A = [1;3;1;2;3;2;2;1;1;2;1;1] 

然后我想修复A中的值,但添加更多随机元素,但我只能用更高的数字替换:

例如,对于上面的矩阵,我将随机添加两个2和另外两个3,给出类似的东西

  

A = [ 3 ; 3; 2 ; 2; 3; 2; 2; 2 ; 1; 2; 1; 3

2 个答案:

答案 0 :(得分:3)

M = [3;3;2;2;2;2];
M(end+1:end+4) = 1;

M=M(randperm(10))

你的问题的后半部分需要做出很多澄清。

答案 1 :(得分:1)

第一部分

您可以使用randsample

A = ones(1,12); %// original values
v = [3 3 2 2 2 2]; %// values to "disperse" in A

ind_replace = randsample(1:numel(A), numel(v)); %// index of entries to be replaced
A(ind_replace) = v;

如果您没有randsample(统计工具箱的一部分),请使用randperm并选择前几个元素:

ind_replace = randperm(numel(A));
ind_replace = ind_replace(1:numel(v));
A(ind) = v;

第二部分

仅替换等于1的条目:

v = [2 2 3 3]; %// values to "disperse" among the 1 values in A
ind_ones = find(A==1); %// index of entries which equal one
ind_replace = randsample(1:numel(ind_ones), numel(v)); %// index within the above
%// Or: ind_replace = randperm(numel(ind_ones));
%//     ind_replace = ind_replace(1:numel(v));
A(ind_ones(ind_replace)) = v;

注意这概括了第一部分,也就是说,当A的所有条目等于1时,也可以使用它。