3

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

  1. 认为A = [3 4 1 9 5]
  2. 随机排列A说,A = [5 1 4 3 9]
  3. 将 2 添加到前两个元素:A = [7 3 4 3 9]
  4. 置换A背,A = [3 4 3 9 7]

我正在使用randperm()函数来置换:

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

但问题是如何在将数组更改为第一个排列后将其重新A排列。

4

3 回答 3

9

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

A(index) = A;

;-)

于 2012-11-18T11:38:55.210 回答
4

所以基本上,你只想添加 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;
于 2012-11-18T13:10:23.517 回答
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);
于 2012-11-18T11:11:52.207 回答