numpy.genfromtxt无法正确读取布尔数据

时间:2014-12-01 07:17:35

标签: numpy

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

使用dtype='u1'我按预期得到'1'。但是dtype='b1'(Numpy的布尔)我得到'假'。

1 个答案:

答案 0 :(得分:4)

我不知道这是不是一个bug,但到目前为止,只有当文件包含文字字符串'False时,我才能使dtype=bool工作(没有显式转换器) '和'真':

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)

如果您的数据是0和1,您可以将其读作整数然后转换为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)