Недавно я решил попробовать matplotlib.pyplot, используя gnuplot для построения научных данных в течение многих лет.Я начал с простого чтения файла данных и построения двух столбцов, как это делал бы gnuplot с plot 'datafile' u 1:2
.Требования для моего комфорта:
- Пропускать строки, начинающиеся с
#
, и пропускать пустые строки. - Разрешить произвольное количество пробелов между и до фактических чисел
- разрешить произвольное количество столбцов
- быть быстрым
Теперь следующий кодмое решение проблемы.Однако, по сравнению с gnuplot, это действительно не так быстро.Это немного странно, так как я прочитал, что одним большим преимуществом py (plot / thon) перед gnuplot является его скорость.
import numpy as np
import matplotlib.pyplot as plt
import sys
datafile = sys.argv[1]
data = []
for line in open(datafile,'r'):
if line and line[0] != '#':
cols = filter(lambda x: x!='',line.split(' '))
for index,col in enumerate(cols):
if len(data) <= index:
data.append([])
data[index].append(float(col))
plt.plot(data[0],data[1])
plt.show()
Что бы я сделал для ускорения чтения данных?Я быстро взглянул на модуль csv
, но он не казался слишком гибким с комментариями в файлах, и все еще нужно перебирать все строки в файле.