gpt4 book ai didi

python - 限制使用 numpy.genfromtxt 为 matplotlib 读取多少数据

转载 作者:太空狗 更新时间:2023-10-29 17:47:23 26 4
gpt4 key购买 nike

我在 python 中创建一个图形,使用源数据的文本文件和 matplotlib 绘制图形。下面的简单逻辑运行良好。

但是有没有办法让 numpy.gentfromtxt 只读取文件 'temperature_logging' 的前 50 行?目前它读取整个文件。

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')

temperature_logging中的内容;

21.75 12-01-2012-15:53:35    
21.75 12-01-2012-15:54:35
21.75 12-01-2012-15:55:35
.
.
.

最佳答案

numpy.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

关于python - 限制使用 numpy.genfromtxt 为 matplotlib 读取多少数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13663721/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com