用numpy的genfromtxt读取每第n行的最快方法

时间:2015-01-15 10:52:53

标签: python arrays numpy genfromtxt

我用numpy的genfromtxt读取我的数据:

import numpy as np
measurement = np.genfromtxt('measurementProfile2.txt', delimiter=None, dtype=None, skip_header=4, skip_footer=2, usecols=(3,0,2))
rows, columns = np.shape(measurement)
x=np.zeros((rows, 1), dtype=measurement.dtype)
x[:]=394
measurement = np.hstack((measurement, x))
np.savetxt('measurementProfileFormatted.txt',measurement)

这很好用。但我只希望在最终的输出文件中5-th6-th(所以n-th)行。 根据{{​​3}},没有参数可以做到这一点。我不想迭代数组。有没有推荐的方法来处理这个问题?

3 个答案:

答案 0 :(得分:4)

为避免阅读整个数组,您可以将np.genfromtxtitertools.islice结合使用以跳过行。这比读取整个数组然后切片要快一些(至少对于我尝试的较小数组而言)。

例如,这是file.txt

的内容
12
34
22
17
41
28
62
71

然后例如:

>>> import itertools
>>> with open('file.txt') as f_in:
        x = np.genfromtxt(itertools.islice(f_in, 0, None, 3), dtype=int)

返回一个数组x,其中包含上述文件的036个索引元素:

array([12, 17, 62])

答案 1 :(得分:0)

无论如何你必须阅读整个文件,选择第n个元素做类似的事情:

>>> a = np.arange(50)
>>> a[::5]
array([ 0,  5, 10, 15, 20, 25, 30, 35, 40, 45])

答案 2 :(得分:0)

如果您只想在最终输出文件中使用特定行,那么为什么不保存这些行而不是保存整个'测量'矩阵:



output_rows = [5,7,11]
np.savetxt('measurementProfileFormatted.txt',measurement[output_rows,:])