二次元配列の全要素について順位付けがしたいです.
簡潔に述べると, 行や列だけでなく行列全体, 全要素で順位付けがしたいのですがスマートにできる方法などございますでしょうか.
※相互相関係数行列(下図)を二次元配列として使用しています.
試したこと
Googleで検索して調べてみたところ,PandasのDataframeを使って順位付けできる関数があるらしく, まずnumpy配列をDataframeに変換します.
また,相互相関係数行列は
①対角成分が1
②対角線について対称
であり,これは順位付けの際に邪魔です.
-1にして順位付けの対象から外す必要があります.
Python
1#cvcは相互相関係数行列, N×Nのnumpy配列 2 3#numpy配列をDataframeに変換 4df = pd.DataFrame(cvc) 5 6#①,②の解消 7for i in range (N): 8 cvc[i,i]=-1 9 for j in range (i): 10 cvc[i,j]=-1 11 12# 確認用 13plt.figure(figsize=(8,6)) 14plt.title('Cross Corration', y=1.00, size=24) 15sns.heatmap(cvc, vmax=1, vmin=-1,center=0,cmap='rainbow')
このようにとりあえずですが, 順位付けがスムーズにできそうなデータに整形できましたが... ここでpandasのDataframeの関数を確認してみます.
確認するとどうやら行や列を対象にした順位付けしかできないようです.
最悪for文を使って全要素を比較してゴリ押すこともできなくはなさそうですが, パッとかける自信がないのと,きれいに結果をまとめることも考えると不適切に感じられます.
どうか, 知恵を貸して頂けないでしょうか.
よろしくお願いします.
追記
ただ順位付け,と書いてしまい語弊があったかもしれません.
配列及びデータフレームの形を崩さず,その配列の値を順位に書き直すようなものを順位付けとします.
例 [[1 2],[4,3]]を順位付けする場合 ⇒ [[4,3],[1,2]] と変換できること順位付けとします.
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2019/11/20 04:49