NumPy genfromtxt - 跳过以特定数字开头的行
NumPy genfromtxt - skipping rows that start with specific number
我有一个文件,其中第一列有一个整数,表明它是否是元数据的数据 - 以 0 开头的行是元数据,其中的列数不固定,而任何其他整数指定数据线:
0 -1.0000E+02 2.0000E+03 -1.0000E+03
0 NDIM= 3 IPS = 1
1 3 0 0 1.8279163801E+001 2.1982510269E-002
我想使用 numpy 以便仅从以非零整数开头的行读取数据,我可以使用 numpy.genfromtxt() 来完成吗?
np.genfromtxt
可以接受一个迭代器作为它的第一个参数。因此,您可以构建一个生成器表达式来生成所需的行:
import re
lines = (line for line in open('data', 'rb') if re.match(r'^\s*[1-9]', line) )
然后
In [61]: np.genfromtxt(lines)
Out[61]:
array([ 1. , 3. , 0. , 0. ,
18.2791638 , 0.02198251])
re.match(r'^\s*[1-9]', line)
测试该行是否以空格开头,后跟一个介于 1 和 9 之间的数字。如果非零整数可以以 0 开头,那么您可以改用
lines = (line for line in open('data', 'rb') if line.split(None, 1)[0].lstrip('0') in '123456789')
我有一个文件,其中第一列有一个整数,表明它是否是元数据的数据 - 以 0 开头的行是元数据,其中的列数不固定,而任何其他整数指定数据线:
0 -1.0000E+02 2.0000E+03 -1.0000E+03
0 NDIM= 3 IPS = 1
1 3 0 0 1.8279163801E+001 2.1982510269E-002
我想使用 numpy 以便仅从以非零整数开头的行读取数据,我可以使用 numpy.genfromtxt() 来完成吗?
np.genfromtxt
可以接受一个迭代器作为它的第一个参数。因此,您可以构建一个生成器表达式来生成所需的行:
import re
lines = (line for line in open('data', 'rb') if re.match(r'^\s*[1-9]', line) )
然后
In [61]: np.genfromtxt(lines)
Out[61]:
array([ 1. , 3. , 0. , 0. ,
18.2791638 , 0.02198251])
re.match(r'^\s*[1-9]', line)
测试该行是否以空格开头,后跟一个介于 1 和 9 之间的数字。如果非零整数可以以 0 开头,那么您可以改用
lines = (line for line in open('data', 'rb') if line.split(None, 1)[0].lstrip('0') in '123456789')