【问题标题】:Matlab: How to randomly permute and inverse permute a vectorMatlab:如何随机置换和逆置换向量
【发布时间】:2012-11-06 12:49:09
【问题描述】:

我需要在 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 更改为第一个排列后将其重新排列。

【问题讨论】:

    标签: matlab random


    【解决方案1】:

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

    p = randperm(n,k) 返回一个行向量,其中包含从 1 到 n(含)随机选择的 k 唯一整数。

    那么你可以使用:

    idx = randperm(numel(A),2);
    A(idx)=A(idx) + 2;
    

    在旧版本上,您可以使用:

    idx = randperm(numel(A));
    idx = idx(1:2);
    A(idx)=A(idx) + 2;
    

    【讨论】:

    • 啊!!这个也是。 Matlab 简直太棒了
    【解决方案2】:

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

    A(index) = A;
    

    ;-)

    【讨论】:

      【解决方案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);
      

      【讨论】:

      • 您知道nums(index)index 完全相同(因为nums=1:length(A))对吗?正如A(nums)A 本身完全相同。这似乎过于复杂:s
      猜你喜欢
      • 2017-10-09
      • 2011-09-19
      • 1970-01-01
      • 2014-09-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多