2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

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

Last updated at Posted at 2017-07-21

性能測定

前回のネタの続き
俺がえいやとやってみた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#でアプリ書いて解決した。

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?