【问题标题】:converters option in numpy genfromtxt not accepting -ve indexing of columnsnumpy genfromtxt 中的转换器选项不接受 -ve 列索引
【发布时间】:2013-02-27 04:54:48
【问题描述】:

我只想加载文本文件中的最后几列并进行一些评估。

我使用 numpy.genfromtxt 和参数 converters={-1:func,-2:func}

但它不起作用。另一方面,如果我像 converters={56:func,57:func} 这样提供前向索引,它可以正常工作。

为什么转换器参数不支持 python 的向后索引? 如果我只知道最后一列的索引,还有办法这样做吗?

【问题讨论】:

    标签: python input numpy genfromtxt


    【解决方案1】:

    使用numpy.loadtxt 可以工作,您可以使用converters 参数来定义您的函数。有一个tmp.txt 文件:

    11,12,13,14,15,16,17,18,19
    21,22,23,24,25,26,27,28,29
    31,32,33,34,35,36,37,38,39
    41,42,43,44,45,46,47,48,49
    51,52,53,54,55,56,57,58,59
    

    您可以加载选定的列(也可以选择您希望它们堆叠的顺序):

    import numpy as np
    print np.loadtxt('tmp.txt',delimiter=',',usecols=(-2,-1))
    #[[ 18.  19.]
    # [ 28.  29.]
    # [ 38.  39.]
    # [ 48.  49.]
    # [ 58.  59.]]
    print np.loadtxt('tmp.txt',delimiter=',',usecols=(-1,-2),converters={-1: lambda x: float(x)+100})
    #[[ 119.   18.]
    # [ 129.   28.]
    # [ 139.   38.]
    # [ 149.   48.]
    # [ 159.   58.]]
    

    【讨论】:

    • 是的,np.loadtxt 支持向后索引。但我的文本文件不是完整的数字,有些列有字符串条目。所以我不能使用 loadtxt。
    • 你可以,只需传递dtype=object,或者,如果你想使用结构化数组中的不同类型读取每一列:dtype={'names': ('col1', 'col2', 'col3'), 'formats': (int, str, float)},例如
    • 哦。好,谢谢。有了这个功能,我应该可以使用 loadtxt 进行管理。我认为,只要表中没有缺失值条目,我应该能够使用 loadtxt 而不是 genfromtxt。再次感谢。
    • 不客气。如果你喜欢这个答案,你也可以投票! ;)
    猜你喜欢
    • 2014-05-23
    • 1970-01-01
    • 2019-04-08
    • 2012-05-10
    • 1970-01-01
    • 2013-03-28
    • 2015-11-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多