- ベストアンサー
matirix market データ読み込み方法は?
- MATRIX MARKETで行列データを取得してC言語で読み込む方法について知りたいです。
- 連立一次方程式の解法の研究のために、MATRIX MARKETの行列データをC言語で読み込もうとしていますが、上手くいきません。
- 非ゼロ要素のみが記述されている.mtxファイルを読み込む方法について教えてください。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
こんばんは. 「何をしたいのか」について補足をお願いします. >コマンドプロンプトに読み込んだデータを出力することはできるのですが、配列に格納… この仰りようが既に矛盾しているということにお気づきでしょうか? 私が触ったのは結構前ですが,そのときからコードの内容が変わったのかと思い, 現在のコードを入手し,手元で再び実行してみました. 与えたデータファイルは http://math.nist.gov/MatrixMarket/data/NEP/tubular/tub100.html です. 結果,正しく標準出力にデータが出力されました. これはexample_read.cの実行結果です. つまり,この時点で「配列I,J,valにデータは格納されています」. フォーマットを何か別の型式に変更したいということでしょうか? それとも「example_read.cはコンパイルできたのだが,自分のコードはうまく行かない」ということでしょうか? 後者であればmatrix market云々ではなく,単純に質問者様の実装が不適切なだけ, C言語そのものについて知識が不足しているということになります. とりあえず, fscanf(fp,"%d %d %d ",&a[i],&col_ind[i],&val[i]); の部分は書式指定が不適切なのでこのままではデータを正しく読めません. 勝手に変更したりせずにサンプルコードをそのまま使えば良いのでは?
その他の回答 (1)
- echoes_x86
- ベストアンサー率65% (21/32)
こんばんは. ちょっと触ったことがある程度ですが… matrix marketに読込の為のソースコード(参考URL)がありますよ. ヘッダの解析等一通りできるはずです. まぁ,私は「非零要素が何の順番で並んでいるか」 が分からなかったので読み込んだ後ソートして使ってましたが. こんなことをしていたのは「行列の乗算」を「転置行列の乗算」きちんと行いたかったためです.
お礼
ご回答ありがとうございます。 おっしゃるとおり、そのソースコードを使ってみたのですが、うまくいかないのです。コマンドプロンプトに読み込んだデータを出力することはできるのですが、配列に格納、もしくは、別ファイルに出力することができません。 読み込みには、 fp=fopen("tub100.mtx","r") while( 1) { fscanf(fp,"%d %d %d ",&a[i],&col_ind[i],&val[i]); if( feof(fp)) break; i++; } という感じで配列に格納しようとしています。
お礼
再度のご回答ありがとうございます。 結局、example_read.cにおいて既に配列に格納されていることに恥ずかしながら気付いていませんでした。。 回答者様のご指摘のとおり、C言語についてはまだまだ知識足らずで、自分で上記のコードで読み込もうとしていました。 丁寧に教えていただきありがとうございました。 無事、したいことができました。