【问题标题】:numpy.genfromtxt cannot read boolean data correctlynumpy.genfromtxt 无法正确读取布尔数据
【发布时间】:2014-12-01 07:17:35
【问题描述】:

无论输入值是什么,np.genfromtxt 将始终返回False

使用dtype='u1' 我得到了预期的“1”。但是使用dtype='b1'(Numpy 的布尔值)我得到'False'。

【问题讨论】:

  • 我无法使用 NumPY 1.9.0 重现您的问题。你能添加一个明确的例子吗?
  • 1.8.x 和 1.6.x 有这个问题。在新版本中,这可能已被修复。

标签: numpy


【解决方案1】:

我不知道这是否是一个错误,但到目前为止,只有当文件包含文字字符串 'False' 和“真”:

In [21]: bool_lines = ['False,False', 'False,True', 'True,False', 'True,True']

In [22]: genfromtxt(bool_lines, delimiter=',', dtype=bool)
Out[22]: 
array([[False, False],
       [False,  True],
       [ True, False],
       [ True,  True]], dtype=bool)

如果你的数据是0s和1s,你可以把它读成整数,然后转换成bool:

In [26]: bits = ['0,0', '0,1', '1,0', '1,1']

In [27]: genfromtxt(bits, delimiter=',', dtype=np.uint8).astype(bool)
Out[27]: 
array([[False, False],
       [False,  True],
       [ True, False],
       [ True,  True]], dtype=bool)

或者您可以为每一列使用转换器

In [28]: cnv = lambda s: bool(int(s))

In [29]: converters = {0: cnv, 1: cnv}

In [30]: genfromtxt(bits, delimiter=',', dtype=bool, converters=converters)
Out[30]: 
array([[False, False],
       [False,  True],
       [ True, False],
       [ True,  True]], dtype=bool)

【讨论】:

  • genfromtxt 正在使用np.lib._iotools.StringConverter(bool) 将字符串转换为布尔值。它处理大写/小写“真/假”,并为其他任何内容返回错误。
猜你喜欢
  • 2018-06-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多