実現したいこと
こちらの関連質問です。
そこではリストの要素値がすべて0である行と列を削除する方法を教えていただきました。
行列Rは以下のようなファイルです。
1 2 0 4 3 0 0 0 0 0 0 0 5 0 0 0
このRに対して以下のような作業を考えます。
① 要素値がすべて0である行と列を削除する(削除した行列をR2とします)
1 2 4 3 0 0 5 0 0
② R2からRを復元する
1 2 0 4 3 0 0 0 0 0 0 0 5 0 0 0
よく分からないことをやろうとしているなと思われるかもしれません。対象がもっと巨大な行列で、①の状態にしてから、とある作業をして、また復元したいと考えています。①の部分のコードの後にどのようなコードを書けば良いか分からないので、どなたか教えてください。
なお、Rはもっと巨大な行列で、ほとんどの要素値が0です。
該当のソースコード
python
1import numpy as np 2import pandas as pd 3 4R = pd.read_csv("R.csv",header=None).values 5 6R2 = R[np.ix_(~np.all(R == 0, axis=1), ~np.all(R == 0, axis=0))] 7np.savetxt('R2.csv', R2, delimiter=",") 8 9##########ここまでが①
試したこと
①の作業で消した行、列の番号を記憶しておいて、そこに0の行、列を追加すれば良いと思うのですが、どのようにやるか分かりませんでした。
そうですね、、もう一度 R.csv ファイルを読み込めばよいのではないでしょうか。
(melianさんらしくないコメント!)
> とある作業をして
どんな作業ですか? dataframeの内容を書き換えるような作業ですか?
> また復元したい
復元したときに、その「とある作業の内容」は残すのでしょうか?
プログラムの最後でRの内容を確認してみてはどうでしょうか?
>melian様
コメントありがとうございます。
書き方が良くなかったです。申し訳ありません。
「とある作業」の詳細は書けませんが、(例えば)行列の各成分に対して何かしらの処理をするとお考え下さい。
なので、①の作業で消した行、列の番号を記憶しておいて、そこに0の行、列を追加すれば良いと思いました。これも結局、「とある作業」前に全要素に対して行うしかない、と理解しました。
>TakaiY様
「とある作業」の中身は書けません。申し訳ありません。行列の各成分に対して何かしらの処理をするとお考え下さい。
復元したときに、その「とある作業の内容」は残さなくても良いです。
結局、①の作業で消した行、列の番号を記憶する方法を知りたいということになるのだろうか・・・
> その「とある作業の内容」は残さなくても良いです。
であれば、melianさんの回答のとおり読み直すか、Rを保存しておくのが簡単ですよ。
> 復元したときに、その「とある作業の内容」は残さなくても良いです。
そうであれば他の人が言うように何もすることはないですね。R.csvは残っていますので。
>TakaiY様
コメントありがとうございました。
>meg_様
コメントありがとうございました。