質問するログイン新規登録

Q&A

解決済

2回答

344閲覧

疎行列の要素値をファイルにすべて書き込みたいです

yyicp

総合スコア98

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

1グッド

0クリップ

投稿2025/01/20 05:31

1

0

実現したいこと

data.csvは8×8の二次元リストで要素値はすべて1です。

今、csvファイルを読み込んでその要素値をすべて書き込むプログラムを作成しました。
出力ファイルcsr.txtは以下の通りです。
26行目が「・・」になっており、値がすべて表示されていません。
値をすべて表示されるようにするにはどのようにすれば良いでしょうか。

イメージ説明

該当のソースコード

python

1import numpy as np 2np.set_printoptions(threshold=np.inf) 3from scipy.sparse import csr_matrix 4import pandas as pd 5 6matrix = pd.read_csv("data.csv",header=None).values.tolist() 7csr = csr_matrix(matrix) 8 9filename = "csr.txt" 10file = open(filename, 'w') 11file.write(str(csr)) 12file.close()

試したこと

2行目に示す通り
np.set_printoptions(threshold=np.inf)
と加えてみましたがダメでした。

melian👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

guest

回答2

0

ベストアンサー

scipy.sparse.find() を使って値を取り出して、手動のループで書くのはどうでしょう。
https://docs.scipy.org/doc/scipy-1.15.0/reference/generated/scipy.sparse.find.html

python

1from scipy import sparse 2 3#... 4csr = sparse.csr_matrix(matrix) 5 6filename = "csr.txt" 7with open(filename, 'w') as file: 8 row, col, val = sparse.find(csr) 9 for i, j, v in zip(row, col, val): 10 file.write(f'({i}, {j})\t{v}\n')

(writeするときのフォーマットは適当に調整ください)

csvでもいいなら、データフレームにして to_csv() するのが簡単だと思います。

python

1df_csr = pd.DataFrame({'row': row, 'col': col, 'val': val}) 2df_csr.to_csv('csr.csv', index=False)

投稿2025/01/20 07:06

bsdfan

総合スコア4963

yyicp

2025/01/20 07:11

できました。 どうもありがとうございました。
guest

0

出力の形式が異なりますが、scipy.io.mmwrite を利用するとよいかもしれません。

python

1from scipy.sparse import csr_matrix 2from scipy import io 3import pandas as pd 4 5matrix = pd.read_csv("data.csv",header=None).values.tolist() 6csr = csr_matrix(matrix) 7 8filename = "csr" 9io.mmwrite(filename, csr, symmetry='general')

csr.mtx

%%MatrixMarket matrix coordinate integer general % 8 8 64 1 1 1 1 2 1 1 3 1 1 4 1 1 5 1 1 6 1 1 7 1 1 8 1 2 1 1 2 2 1 2 3 1 2 4 1 :

※ インデックスは 0-base ではなく 1-base です

投稿2025/01/20 06:26

編集2025/01/20 06:30
melian

総合スコア21624

yyicp

2025/01/20 06:34

できました。 どうもありがとうございました。 インデックスが1から始まることも確認しました。
yyicp

2025/01/20 07:18

インデックスが1から始まることが、 どこかで間違える原因になりそうな気がしたので bsdfan様の回答をベストアンサーにさせていただきました。
yyicp

2025/02/04 02:54 編集

反応遅れて申し訳ありません。 教えていただいたURLを基に以下のようなコードで回してみましたが、うまくいきませんでした。 from scipy.sparse import csr_matrix from scipy import io import pandas as pd matrix = pd.read_csv("data.csv",header=None).values.tolist() csr = csr_matrix(matrix) filename = "csr" io.mmwrite(filename, csr, symmetry='general') from io import StringIO from scipy.io import mmread m = mmread(StringIO(filename), spmatrix=False) print(m) エラーメッセージは以下のようになります。(行数の62は無視してください) Traceback (most recent call last): File "〇〇〇\testCV345.py", line 62, in <module> m = mmread(StringIO(filename), spmatrix=False) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ TypeError: mmread() got an unexpected keyword argument 'spmatrix'
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.29%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問