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