相関行列から始めます。これはi番目とj番目の要素がi番目の要素とj番目の要素の間の相関関係にあることを意味します(したがって、対角線は1になります)。私は別の要素(1のリストが私の場合には役に立たないので、それ自身を含まない)で各要素の最大の相関関係を見出そうとしています。Python行列の各行で2番目に大きい要素を得る
1 0.7 0.4 0.1
0.7 1 0.3 0.2
0.4 0.3 1 0.5
0.1 0.2 0.5 1
上記のマトリックスがあるとします。私は
(最大相関、i番目の要素、j番目の要素)のようなものを持っています。上記のマトリックスで、私は結果として
[(0.7, 0, 1), (0.7, 1, 0), (0.5, 2, 3), (0.5, 3, 2)]
を取得したいと思います。
これについてはどのような良い方法がありますか?
私はパンダのデータフレームとして行列を持っています。インデックスと列の名前は同じです(現在は[0, 1, 2, 3]
)。現在、私は唯一の
D = {}
for i in df.columns:
max = (0, 0, 0)
for j in df.columns:
if i==j:
continue
element = df.loc[i,j]
if element > max[0]:
max = (element, i, j)
D[i] = max
ような何かをやって考えてきましたが、これは、より良い/より速く、そしてこれを改善することができます方法であっ内蔵されて行うことができますか?
これを解決する方法が思いつきましたか?あなたが試したことを分かち合う。あなたがベストを学ぶ方法と、それがスタックオーバーフローでここに来るはずであることを学ぶ方法として、あなたが分かち合い、努力を示すことが重要です。この問題を解決する良い方法は、問題>あなたの努力>質問やその他の詳細です。研究努力は必須です。がんばろう。 –
こんにちは!返信ありがとうございます。私は行ごとに(forループを入れ子にして)行ごとにループし、次にどの要素が2番目に大きいかを調べることを考えていましたが、やや非効率なようです。 – AsheKetchum
行列が対称であるため、各列を反復することもできます。私は最高の相関の元のインデックスを取得したいので、私はそれを分類しないようにしています。 – AsheKetchum