Mathematica 8のマトリックスの検索 - xと同じ行で他の要素を見つけようとしています

StackOverflow https://stackoverflow.com/questions/8814296

質問

イタリック体のテキストは、誰かが興味を持っている場合、私の一般的な目標を説明しています。質問は下にあります。

Mathematica 8を使用して、単純な分子のエネルギーレベルをグラフ化しようとしています。私の方法は粗雑であり、次のようになります。

  1. 単純なヒューッケルマトリックスの固有値を見つけます。
  2. 複製を削除し、リストのサイズを決定します。
  3. 重複リストを非複雑なリストと比較することにより、縮退の数を評価します。
  4. nは一意のエネルギーレベルの数であるANX 2ゼロマトリックスを作成します。

5.最初の列を一意のエネルギーレベルで埋め、2番目の列を縮退します。

ステップ5で生成されたマトリックスは、次のようになります。

(1  2)
(3  1)   ==    M
(-1 1)

列2の最大値を評価し、同じ行に要素の値を見つけたいと思いますが、列1では、この場合、私が探している答えは1です。

これらのコマンドはどちらも-1に評価します。

Extract[M[[All, 1]], M[[Max[M[[All, 2]]], 1]]]
M[[Max[M[[All, 1]]], 1]]

これは私が望む答えではありません。

任意のヒント?

編集:これ

Part[Part[Position[M, Max[M[[All, 2]]]], 1], 1]

うまくいきますが、わかりません どうして パート[]を2回使用する必要があります。

役に立ちましたか?

解決

内部 Part 最大の最初の発生を提供します。 Position このような最大値を持つ要素が1つしかない場合でも、ポジションのリストを返します。

 M = {{2, 2}, {2, 3}, {2, 2}, {1, 1}}

 {{2, 2}, {2, 3}, {2, 2}, {1, 1}}

Position[M, Max[M[[All, 2]]]]

 {{2, 2}}

したがって、この出力の最初の要素に最初の要素が必要です。あなたはこのようにあなたのコードを凝縮することができます:

Position[M, Max[M[[All, 2]]]][[1, 1]]

ただし、コードがよりうまく処理する必要があると思うことの1つは、この場合です。

 M = {{3, 2}, {2, 3}, {2, 2}, {1, 1}}

3, 2}, {2, 3}, {2, 2}, {1, 1}}

Position[M, Max[M[[All, 2]]]]

{{1, 1}, {2, 2}}

この場合、コードで間違った答えが得られます。

より良いでしょう:

M[[All, 1]][[Position[M[[All, 2]], Max[M[[All, 2]]]][[1, 1]] ]]

または代わりに

M[[Position[M[[All, 2]], Max[M[[All, 2]]]][[1, 1]], 1]]

他のヒント

m = {{1, 2}, {3, 1}, {-1, 1}}
max = Max[m[[All, 2]]]

したがって、最大の位置を見つけて、2番目の列を最初の列に置き換えます。

pos=Position[m, max] /. {x_,_}:>{x,1}
{{1,1}}

次に、POS、つまり{1,1}から最初の要素を取り、サブを使用して使用します Part

m[[Sequence @@ First[pos]]]
1

しかし、私はこのようなものを好むと言っていたので:

Cases[m, {x_, max} :> x]
{1}

結果はリストです。どちらかを使用できます First@Cases[...] または、最大値が列で複数回発生するケースをカバーするために、結果のリストを保持することをお勧めします。

列2の最大値の重複の場合に1つの列のみが必要な場合、私はあなたが使用することをお勧めします Ordering:

m = {{1, 3}, {1, 8}, {5, 7}, {2, 2}, {1, 9}, {4, 9}, {5, 6}};

m[[ Ordering[m[[All, 2]], -1], 1 ]]
{4}
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top