1

構造化されたタプルの1Dnumpy配列がありdtypeます。np.savetxt配列を(圧縮された)csvファイルに書き込むために使用しています。dtype最初の行のヘッダーとして、からのフィールド名を追加したいと思います。array.dtypeを出力すると、次のようになります。

配列は次のタイプのオブジェクトです。

[('time', '<u8'), ('timeStr', '|S27'), ('person', '|S24'), ...]

array.dtypeからタプルを作成し、これを配列の最初のタプルとして追加するのは簡単かもしれないと思いました('time', 'timeStr', 'person'...)が、dtypeオブジェクトは扱いにくいようです(たとえば、反復することはできません)。

これを行う簡単な方法はありますか?

編集:senderleは、最初の問題を解決するarray.dtype.namesが存在することを指摘しました。ただし、理想的には、最初に完全なcsvファイルを書き出してから圧縮せずに、gzipで圧縮されたcsvファイルを出力したいと思います。np.savetxtはネイティブに圧縮をサポートしていますが、numpy配列にヘッダーを追加すると、タイプが間違っているため問題が発生するようです。

4

1 に答える 1

2

フィールド名のタプルを取得する簡単な方法は次のとおりです。

>>> a = numpy.array([(1, 2, 3), (4, 5, 6)], dtype=[('time', '<u8'), 
                                                   ('timeStr', '|S27'), 
                                                   ('person', '|S24')])
>>> a.dtype.names
('time', 'timeStr', 'person')

データを使用してcsvファイルを作成する簡単な方法は次のとおりです。

>>> with open('data.txt', 'w') as datafile:
...     datafile.write(', '.join(a.dtype.names) + '\n')
...     numpy.savetxt(datafile, a, '%i, %s, %s')

data.txtその後の内容:

time, timeStr, person
1, 2, 3
4, 5, 6

バージョン1.7以降を実行している場合は', '.join(a.dtype.names)、新しいheaderパラメーターに渡すこともできます。numpy(ただし、私のバージョンは古いため、この最後のアサーションはテストされていないことに注意してください。)

モジュールでも基本的に同じことができgzipます。numpyただし、圧縮を処理しなくなった可能性があるため、これは遅くなる可能性があります。いくつかのテストを行います。

>>> with gzip.GzipFile('data.gz', 'w') as datafile:
...     datafile.write(', '.join(a.dtype.names) + '\n')
...     numpy.savetxt(datafile, a, '%i, %s, %s')
... 

結果はdata.gz、解凍すると、上記の内容と同じ内容になります。

于 2012-07-23T18:11:32.483 に答える