Python 限制matplotlib的numpy.genfromtxt读取的数据量
我正在用python创建一个图形,使用源数据的文本文件和matplotlib来绘制图形。 下面的简单逻辑运行良好 但是有没有办法让numpy.gentfromtxt只读取文件“温度记录”的前50行?目前它读取整个文件Python 限制matplotlib的numpy.genfromtxt读取的数据量,python,numpy,matplotlib,Python,Numpy,Matplotlib,我正在用python创建一个图形,使用源数据的文本文件和matplotlib来绘制图形。 下面的简单逻辑运行良好 但是有没有办法让numpy.gentfromtxt只读取文件“温度记录”的前50行?目前它读取整个文件 temp = numpy.genfromtxt('temperature_logging',dtype=None,usecols=(0)) time = numpy.genfromtxt('temperature_logging',dtype=None,usecols=(1))
temp = numpy.genfromtxt('temperature_logging',dtype=None,usecols=(0))
time = numpy.genfromtxt('temperature_logging',dtype=None,usecols=(1))
dates = matplotlib.dates.datestr2num(time)
pylab.plot_date(dates,temp,xdate=True,fmt='b-')
pylab.savefig('gp.png')
温度测井中的内容
21.75 12-01-2012-15:53:35
21.75 12-01-2012-15:54:35
21.75 12-01-2012-15:55:35
.
.
.
genfromtxt接受迭代器和文件。这意味着它将接受itertools.islice的输出。这里,test.txt是一个五行文件:
>>> import itertools, numpy
>>> with open('test.txt') as t_in:
... numpy.genfromtxt(itertools.islice(t_in, 3))
...
array([[ 1., 2., 3., 4., 5.],
[ 6., 7., 8., 9., 10.],
[ 11., 12., 13., 14., 15.]])
有人可能会认为这比让numpy处理文件IO要慢,但快速测试表明情况并非如此。genfromtxt提供了一个skip_footer关键字参数,如果您知道文件的长度,可以使用该参数
>>> numpy.genfromtxt('test.txt', skip_footer=2)
array([[ 1., 2., 3., 4., 5.],
[ 6., 7., 8., 9., 10.],
[ 11., 12., 13., 14., 15.]])
…但对1000行文件的一些非正式测试表明,即使只跳过几行,使用islice也会更快:
>>> def get(nlines, islice=itertools.islice):
... with open('test.txt') as t_in:
... numpy.genfromtxt(islice(t_in, nlines))
...
>>> %timeit get(3)
1000 loops, best of 3: 338 us per loop
>>> %timeit numpy.genfromtxt('test.txt', skip_footer=997)
100 loops, best of 3: 4.92 ms per loop
>>> %timeit get(300)
100 loops, best of 3: 5.04 ms per loop
>>> %timeit numpy.genfromtxt('test.txt', skip_footer=700)
100 loops, best of 3: 8.48 ms per loop
>>> %timeit get(999)
100 loops, best of 3: 16.2 ms per loop
>>> %timeit numpy.genfromtxt('test.txt', skip_footer=1)
100 loops, best of 3: 16.7 ms per loop
不知道numpy,但一个可能的解决方案是使用该类
这使您只需使用普通文件IO将实际需要的数据加载到字符串中,还有一个字节版本,从字符串创建一个类似文件的对象并将其传递给numpy。非常违反直觉!有人知道为什么会这样吗?