要素のリストがあります:
データ={{1、2}、{2、7}、{3、14}}
これはX座標とY座標のリストであり、後でListPlotに使用されます。
すべてのY座標について、基本的にY = 1 / Yにしたいので、新しいリストは次のようになります。
DataNew = {{1、1/2}、{2、1/7}、{3、1/14}}
どうすればこのようなことができますか?
要素のリストがあります:
データ={{1、2}、{2、7}、{3、14}}
これはX座標とY座標のリストであり、後でListPlotに使用されます。
すべてのY座標について、基本的にY = 1 / Yにしたいので、新しいリストは次のようになります。
DataNew = {{1、1/2}、{2、1/7}、{3、1/14}}
どうすればこのようなことができますか?
私がdata = {{1, 2}, {2, 7}, {3, 14}}
お勧めします:
{#, 1/#2} & @@@ data
または、次を使用することもできます。
Replace[data, {x_, y_} :> {x, 1/y}, {1}]
次のいずれかを使用しないことをお勧めします。
data /. {x_, y_} -> {x, 1/y}
Cases[data, {x_, y_} -> {x, 1/y}]
Rule
どちらも、ではなく誤って使用しますRuleDelayed
。これは、名前付きパターンのローカライズに失敗することを意味します。また、最初のものは、それがもたらすあいまいさのために良くありません:
{{1, 2}, {2, 7}} /. {x_, y_} :> {x, 1/y}
{{1, 2}, {1/2, 1/7}}
2つ目はそれほど面倒ではありませんが、IMHOはフィルタリング関数であるため、コードがわかりにくく Cases
なるため、本当に必要な場所では使用しないでください。Replace
Leonidは、私が推奨する方法は、それが可能な場合(Realのパックされた配列など)には自動コンパイルされないことを思い出させてくれます。パフォーマンスが重要な場合は、通常、Transpose
以下に比べてdoubleメソッドを使用するのが最も高速です。
dat = RandomReal[99, {50000, 2}];
Do[ {#, 1/#2} & @@@ dat , {50}] // Timing
Do[ Transpose[{#, 1/#2} & @@ Transpose@dat] , {50}] // Timing
{2.074、Null}
{0.032、Null}
あなたが使用することができます:
{#[[1]], 1/#[[2]]} & /@ Data
また、例えば:
data = {{1, 2}, {2, 7}, {3, 14}};
newData = data /. {x_, y_} -> {x, 1/y}
また
newData = Cases[data, {x_, y_} -> {x, 1/y}]
また
f[{a_, b_}] := {a, 1/b};
newData = f /@ data
そして他の無数の可能性。
定義した名前はすべて小文字で始めることを忘れないでください。