【发布时间】:2010-12-28 10:05:49
【问题描述】:
假设我有一个函数 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 *)
]
“Unsort”的最佳方法是什么?
或者我们是否可以变得非常花哨并以某种方式工作:
answer = Unsort[g[Sort[v]]];
添加:让我们通过一个玩具示例来具体说明这一点。 假设我们想要一个函数 f,它接受一个向量并通过将下一个最小元素(如果有)添加到每个元素来对其进行变换。 如果我们假设向量是有序的,这很容易写出来,所以让我们编写一个辅助函数 g 来做这个假设:
g[v_] := v + Prepend[Most@v, 0]
现在对于我们真正想要的函数 f,无论 v 是否已排序,它都有效:
f[v_] := (* remember the order;
sort it;
call g on it;
put it back in the original order;
return it
*)
【问题讨论】:
标签: sorting wolfram-mathematica permutation