相关疑难解决方法(0)

Unsort:记住排列并撤消它

假设我有一个函数f,它接受一个向量v并返回一个新的向量,其元素以某种方式转换.它通过调用假定向量被排序的函数g来做到这一点.所以我想要像这样定义f:

f[v_] := Module[{s, r},
  s = Sort[v];  (* remember the permutation applied in order to sort v *)
  r = g[s];
  Unsort[r]     (* apply the inverse of that permutation *)
]
Run Code Online (Sandbox Code Playgroud)

做"Unsort"的最佳方法是什么?

或者我们是否真的很喜欢并且以某种方式工作:

answer = Unsort[g[Sort[v]]];
Run Code Online (Sandbox Code Playgroud)

补充:让我们以玩具为例来具体化.假设我们想要一个带有向量的函数f,并通过向每个元素添加下一个最小元素(如果有的话)来对其进行转换.如果我们假设向量已经排序,那么这很容易编写,所以让我们编写一个辅助函数g来做出这样的假设:

g[v_] := v + Prepend[Most@v, 0]
Run Code Online (Sandbox Code Playgroud)

现在对于我们真正想要的函数f,无论v是否有效,它都有效:

f[v_] := (* remember the order; 
            sort it;
            call g on it;
            put it back in the original order;
            return it
         *)
Run Code Online (Sandbox Code Playgroud)

sorting wolfram-mathematica permutation

5
推荐指数
2
解决办法
726
查看次数

标签 统计

permutation ×1

sorting ×1

wolfram-mathematica ×1