我正在使用randperm随机置换向量中的元素。但是,我有一个问题,即我有一个大小为N的向量,我只想在该向量中的随机排列k个第一个元素,而N-k元素没有变化。怎么用matlab代码呢?
例如:
A = [1 1 1 1 0 0 0 0 0 0]
% N=10 array length; d=4 number of element equal to 1 in the first k elements, k=7
期望的输出:
A_randperm=[0 1 1 0 1 0 1 0 0 0]
% Random permutation elements of 1st to 7th, 8th to 10th elements stay the same
这是我的代码
d=4;
N=10;
k=7;
column = [ones(1,d) zeros(1,N-d)];% create random vector without permutation
% Random permutation
....
答案 0 :(得分:2)
如评论中所述:
A(1:k) = A(randperm(k));
完成这项工作。
答案 1 :(得分:2)
@ JanDeGier的解决方案略有不同:
x = 1:10;
k = 7;
x = [x(randperm(k)) x(k+1:end)];