2009-10-09 14 views
5

誰かが私がここで間違っていることを示すことができますか?python numpy savetxt

import numpy as np 

a = np.array([1,2,3,4,5],dtype=int) 
b = np.array(['a','b','c','d','e'],dtype='|S1') 

np.savetxt('test.txt',zip(a,b),fmt="%i %s") 

出力は次のようになります。私はあなたが持っている問題は、あなたが整形文字列を通じてタプルを渡していると、それは、%Iとのタプルを解釈できないということです

Traceback (most recent call last): 
    File "loadtxt.py", line 6, in <module> 
    np.savetxt('test.txt',zip(a,b),fmt="%i %s") 
    File "/Users/tom/Library/Python/2.6/site-packages/numpy/lib/io.py", line 785, in savetxt 
    fh.write(format % tuple(row) + '\n') 
TypeError: %d format: a number is required, not numpy.string_ 

答えて

12

あなたは違ったあなたのアレイを構築する必要があります:

z = np.array(zip([1,2,3,4,5], ['a','b','c','d','e']), dtype=[('int', int), ('str', '|S1')]) 
np.savetxt('test.txt', z, fmt='%i %s') 

あなたが列を渡しているときに、出力として探しているもの、これがあると仮定すると、FMT =「%s」を使用してみてくださいsavetextasarray(sequence) callを実行し、結果の配列は|S4タイプです。つまり、すべての要素が文字列です。そのため、このエラーが表示されます。

1

と思います。

1 a 
2 b 
3 c 
4 d 
5 e 
+0

これは間違っています。 'fmt ="%s "'はまったく異なる理由で動作しますが、 'fmt ="%s%s "'も有効です.btw。 – SilentGhost

+0

あなたは正しいです、私がそれが働いたことを私が思った理由ではなく、実現したことを私が投稿したらすぐに。私の悪い。 SilentGhostの投稿ははるかに優れています。ありがとう。 – dwelch

4

あなたはまた、(matplotlib.mlabに含まれる)関数rec2csvうまくいけば

>>> from matplotlib.mlab import rec2csv 
>>> rec = array([(1.0, 2), (3.0, 4)], dtype=[('x', float), ('y', int)]) 
>>> rec = array(zip([1,2,3,4,5], ['a','b','c','d','e']), dtype=[('x', int), ('y', str)]) 
>>> rec2csv(rec, 'recordfile.txt', delimiter=' ') 

を使用することができ、CSVファイルを保存したい場合は、1日のpylabの開発者は、CSVファイルを書き込むにまともなサポートを実装します。