我需要在 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);