使用 numpy genfromtxt 读取每第 n 行的最快方法
Fastest way to read every n-th row with numpy's 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-th
、6-th
(所以 n-th
)行。
根据 numpy.genfromtxt.html 没有参数可以做到这一点。我不想迭代数组。有没有推荐的方法来处理这个问题?
无论如何你必须阅读整个文件,select第 n 个元素做这样的事情:
>>> a = np.arange(50)
>>> a[::5]
array([ 0, 5, 10, 15, 20, 25, 30, 35, 40, 45])
为避免读取整个数组,您可以将 np.genfromtxt
与 itertools.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)
returns 数组 x
包含上述文件的 0
、3
和 6
索引元素:
array([12, 17, 62])
如果您只想要最终输出文件中的特定行,那么为什么不只保存这些行而不是保存整个 'measurement' 矩阵:
output_rows = [5,7,11]
np.savetxt('measurementProfileFormatted.txt',measurement[output_rows,:])
我用 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-th
、6-th
(所以 n-th
)行。
根据 numpy.genfromtxt.html 没有参数可以做到这一点。我不想迭代数组。有没有推荐的方法来处理这个问题?
无论如何你必须阅读整个文件,select第 n 个元素做这样的事情:
>>> a = np.arange(50)
>>> a[::5]
array([ 0, 5, 10, 15, 20, 25, 30, 35, 40, 45])
为避免读取整个数组,您可以将 np.genfromtxt
与 itertools.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)
returns 数组 x
包含上述文件的 0
、3
和 6
索引元素:
array([12, 17, 62])
如果您只想要最终输出文件中的特定行,那么为什么不只保存这些行而不是保存整个 'measurement' 矩阵:
output_rows = [5,7,11]
np.savetxt('measurementProfileFormatted.txt',measurement[output_rows,:])