Matlab:如何随机置换和反向置换矢量

时间:2012-11-18 11:08:23

标签: matlab random

我需要在Matlab中实现以下算法。

  1. 假设A = [3 4 1 9 5]
  2. permute A随机说A = [5 1 4 3 9]
  3. 在前两个元素中添加2:A = [7 3 4 3 9]
  4. 换回A A = [3 4 3 9 7]
  5. 我正在使用randperm()函数进行置换:

    index = randperm(numel(A));
    A = A(index);
    

    但问题是如何在将数组A更改为第一个排列后将其置换回来。

3 个答案:

答案 0 :(得分:9)

您实际上可以将索引放在左侧:

A(index) = A;

- )

答案 1 :(得分:4)

所以基本上,你只想添加2到2个向量A的随机元素。无需置换,只需选择两个随机索引。在最新版本的matlab randperm中有两个参数:

  

p = randperm(n,k)会返回一个行向量,其中包含从{1 k随机选择的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);