我需要在 Matlab 中实现以下算法。
- 认为
A = [3 4 1 9 5]
- 随机排列
A
说,A = [5 1 4 3 9]
- 将 2 添加到前两个元素:
A = [7 3 4 3 9]
- 置换A背,
A = [3 4 3 9 7]
我正在使用randperm()
函数来置换:
index = randperm(numel(A));
A = A(index);
但问题是如何在将数组更改为第一个排列后将其重新A
排列。
您实际上可以将索引放在左侧:
A(index) = A;
;-)
所以基本上,你只想添加 2 到 2 个随机元素的 vector A
。无需置换,只需选择两个随机索引。在最新版本的 matlab randperm中,有两个参数:
p = randperm(n,k)
返回一个行向量,其中包含k
从 1 到(含)随机选择的唯一整数n
。
那么你可以使用:
idx = randperm(numel(A),2);
A(idx)=A(idx) + 2;
在旧版本上,您可以使用:
idx = randperm(numel(A));
idx = idx(1:2);
A(idx)=A(idx) + 2;
试试这个
index = randperm(numel(A));
nums=1:length(A)
return_index=nums(index)
temp = A(index);
temp(1:2)=temp(1:2)+2;
A(nums)=temp(return_index);