【问题标题】:NumPy genfromtxt - skipping rows that start with specific numberNumPy genfromtxt - 跳过以特定数字开头的行
【发布时间】:2016-02-23 09:52:27
【问题描述】:

我有一个文件,其中第一列有一个整数,告诉它是否是元数据的数据 - 以 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() 吗?

【问题讨论】:

    标签: python numpy genfromtxt


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 2013-09-26
      • 1970-01-01
      • 2013-05-28
      • 2019-01-01
      • 2013-11-29
      • 1970-01-01
      • 2019-10-06
      • 2017-09-20
      • 2023-03-27
      相关资源
      最近更新 更多