0

これ欲しい:

        SP,1,2,3
        1,1.000000e+00,2.000000e+00,3.000000e+00
        2,1.630000e+01,1.990000e+01,1.840000e+01
        3,1.630000e+01,1.990000e+01,1.840000e+01
        4,1.630000e+01,1.990000e+01,1.840000e+01

私は次のコードを持っています:

np.savetxt("Final Array.csv", my_array, fmt="%10.6e", delimiter=',')

それは以下を生成します:

    1.000000e+00,2.000000e+00,3.000000e+00
    1.630000e+01,1.990000e+01,1.840000e+01
    1.630000e+01,1.990000e+01,1.840000e+01
    1.630000e+01,1.990000e+01,1.840000e+01

一番上の行と左の列に配列を作成しました。

左端の列を残したまま数値を正しくフォーマットし、一番上の行をそのままフォーマットしたままにできるように、これをフォーマットするにはどうすればよいですか?

vstackとhstackを使用してこれらを組み合わせていますが、「SP」はフロートではないため、問題も発生しています。

それらをフォーマットし、すべてを文字列に変換し、結合してからsavetxtすることはできますか?

4

2 に答える 2

2

次のようなものはどうですか?

 from cStringIO import StringIO
 from itertools import izip

 # savetxt into a string
 sio = StringIO()
 np.savetxt(sio, my_array, fmt="%10.6e", delimeter=',')
 data_lines = sio.getvalue().split('\n')

 with open('Final Array.csv', 'w') as f:
     f.write(header_string + '\n')
     for leftcol, main in izip(left_column, data_lines):
         f.write(leftcol + ',' + main)

または、まったくせずsavetxtにそれを行うには:

with open('Final Array.csv', 'w') as f:
    f.write(header_string + '\n')
    for label, row in izip(left_column, my_array):
        f.write(str(label) + ',' + ','.join('%10.6e' % x for x in row) + '\n')
于 2012-08-31T16:18:10.373 に答える
2

簡単な解決策では、同じ長さmy_arrayと追加の列を持つ一時配列を作成する必要があります。

temp = np.empty((my_array.shape[0], my_array.shape[1]+1))

次に、最初の列に必要なインデックスを入力し、最後の列に初期配列を入力します。

temp[:,1:] = my_array
temp[:,0] = np.arange(1, len(my_array)+1)

ヘッダーを書き込むには、最初にファイルを書面で開く必要があります。ファイルオブジェクトをに渡すことはできます。最初の列が、として、他の列が:np.savetxtとして書き込まれるように、フォーマット文字列を変更する必要があります。int"%10.6e"

with open('final.csv', 'w') as f:
    f.write("SP,1,2,3\n")
    np.savetxt(f, temp, fmt="%i,%10.6e,%10.6e,%10.6e",delimiter=",")

の列数に応じて、フォーマット文字列を定義するためのよりインタラクティブな方法my_arrayは、

fmt = ",".join(["%i"] + ["%10.6e"] * my_array.shape[1])
np.savetxt(f, temp, fmt=fmt, delimiter=",")
于 2012-08-31T16:18:19.250 に答える