我试图在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
答案 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时,也可以使用它。