Python
CSV
numpy

PythonでCSVファイルを転置する その2:性能測定

More than 1 year has passed since last update.

性能測定

前回のネタの続き
俺がえいやとやってみたnumpy.array.T使う場合と、コメントもらったzip使う場合とで性能を比べてみた。

入力は1000行1000列の1M.csvと、5000行5000列の25M.csv。

方法1
import sys
import numpy
def csvt_1(fnin, fnout):
    fin = open(fnin, "r")
    fout = open(fnout, "w")
    for line in numpy.array([s.strip('\n').split(',') for s in fin]).T:
        fout.write(",".join(line) + "\n")
    fin.close()
    fout.close()
方法2
import sys
def csvt_2(fnin, fnout):
    fin = open(fnin, "r")
    fout = open(fnout, "w")
    for line in zip(*[s.strip('\n').split(',') for s in fin]):
        fout.write(','.join(line) + '\n')
    fin.close()
    fout.close()

測定結果(IPythonでの%time %run)
 方法1 1M.csv:約500ms 25M.csv:約14s
 方法2 1M.csv:約250ms 25M.csv:約11s

何度か計ったけどだいたい同じ。zipの勝ち。
これは何だろう。zipは遅延評価がいい感じに効いているとかだろうか。
ともあれ有意義な結果が得られた。

ただ残念ながら

このコードを試すきっかけとなった、同僚から話題が出たデータはサイズが約40GB。
それに対しては今回の方法は使えなさそうだったので、これとは別にC#でアプリ書いて解決した。