ベクトルvをとり、要素を何らかの方法で変換した新しいベクトルを返す関数fがあるとします。 これは、ベクトルがソートされていると仮定して関数gを呼び出すことで行います。 だから私はfはそうのように定義することにしたい。Unsort:置換を覚えて元に戻す
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 *)
]
「ソート解除」を行うための最善の方法は何ですか?
それとも私たちは本当に空想得ることができ、これは何とか動作しています
answer = Unsort[g[Sort[v]]];
追加:のは、おもちゃの例で、このコンクリートを作ってみましょう。 ベクトルをとり、次の最小要素があればそれを各要素に加えることによってベクトルを変換する関数fが必要であるとします。 我々はベクトルがソートされていると仮定した場合に書くのは簡単だが、それでは、その仮定を作るヘルパー関数g書いてみましょう:Vがソートされているか否かの作品たちが本当にしたい関数f、のための今すぐ
g[v_] := v + Prepend[[email protected], 0]
を:
f[v_] := (* remember the order;
sort it;
call g on it;
put it back in the original order;
return it
*)
おそらくそれがパラメータとして**グラム**を渡す方が良いでしょう。 –
またはそれよりやや効率的です。オリジナルをWith [{o = Ordering [v]}、Part [g [v [[o]]]、Ordering [o]]] 'に変更してください。 – Janus