web-dev-qa-db-ja.com

numpy配列をtxtファイルに行ごとに保存する

私はフォームのnumpy配列を持っています

a = [1,2,3]

これを.txtファイルに保存して、ファイルが次のようになるようにします。

1 2 3

Numpy.savetxtを使用すると、次のようなファイルが取得されます。

1
2
3

これに対する簡単な解決策があるはずです、何か提案はありますか?

31
Palle

numpy >= 1.5、 できるよ:

#ファイル名は二重引用符で囲まれていることに注意してください。
#example "filename.txt"

numpy.savetxt("filename", a, newline=" ")

編集

同じ長さの複数の1D配列

a = numpy.array([1,2,3])
b = numpy.array([4,5,6])
numpy.savetxt(filename, (a,b), fmt="%d")

# gives:
# 1 2 3
# 4 5 6

可変長の複数の1D配列

a = numpy.array([1,2,3])
b = numpy.array([4,5])

with open(filename,"w") as f:
    f.write("\n".join(" ".join(map(str, x)) for x in (a,b)))

# gives:
# 1 2 3
# 4 5
38
Avaris

別の答えは、次のように_(1, N)_の次元を持つように配列を変形することです:

_savetext(filename, a.reshape(1, a.shape[0]))
_
16
Hooked
import numpy
a = numpy.array([1,2,3])

with open(r'test.txt', 'w') as f:
    f.write(" ".join(map(str, a)))
7
BioGeek

受け入れられた回答の最初の解決策は、改行文字がまだ必要な場合に問題があることがわかりました。問題に対する最も簡単な解決策はこれを行うことでした:

numpy.savetxt(filename, [a], delimiter='\t')
2
omegamanda
import numpy as np

a = [1,2,3]    
b = np.array(a).reshape((1,3))    
np.savetxt('a.txt',b,fmt='%d')
2
Innis

私はこれが古いことを知っていますが、これらの答えはどれもnumpyが行ごとに配列を保存しないという根本的な問題を解決しませんでした。私はこのライナーが私のためのトリックをしたことがわかりました:

b = np.matrix(a)
np.savetxt("file", b)
1
cdamayor

非常に簡単:[1,2,3]

リストは列のようなものです。

1
2
3

行のようなリストが必要な場合は、コルシェテを2重にします。

[[1, 2, 3]]  --->    1, 2, 3

そして

[[1, 2, 3], [4, 5, 6]]  ---> 1, 2, 3
                             4, 5, 6

最後に:

np.savetxt("file", [['r1c1', 'r1c2'], ['r2c1', 'r2c2']], delimiter=';', fmt='%s')

注、角括弧の間のコンマ、内部リストは外部リストの要素です

0
McKinley

numpy.savetxt() メソッドには、注目に値するいくつかのパラメーターがあります。

fmt:strまたはstrsのシーケンス、オプション
配列内の数値をフォーマットするために使用されます。フォーマットの詳細についてはドキュメントを参照してください

区切り文字:str、オプション
列を区切る文字列または文字

改行:str、オプション
行を区切る文字列または文字。

例を見てみましょう。サイズ(M, N)の配列があり、範囲(0、255)の整数で構成されています。配列を行ごとに保存して適切に表示するには、次のコードを使用できます。

import numpy as np

np.savetxt("my_array.txt", my_array, fmt="%4d", delimiter=",", newline="\n")
0
jdhao