3

我有一些包含 Fortran 代码的布尔输出的数据文件:

write(23,'(L2)') data

因此,文件的一部分将如下所示:

F F T F ...

我想用 numpy.asarray() 函数在 Python 中读取这个文件,因为这样转换数据很容易,例如:

data = asarray(f.readline().split(),'bool')

然而,无论它是什么数据,Python 总是返回一个全为“真”的数组。

我也试过写成'False False True False ...'或'0 0 1 0 ...',但它们都不起作用。

我想知道是否有办法使用 asarray() 来实现这一点?或任何其他可以在不使用循环的情况下转换布尔数据的建议?

4

2 回答 2

5

如果您可以将数据作为“T”和“F”字符串的数组读取,那么您可以执行以下操作:

>>> a = np.array(["T", "F", "T"])
>>> a == "T"
array([ True, False,  True], dtype=bool)
于 2013-08-22T16:16:45.900 回答
3

一种方法是对输入文件的每个字符串进行更多处理以获得您期望的结果:

with open('input.dat') as handle:
    data = asarray([[x == 'T' for x in line.strip().split()]
                    for line in handle],
                   dtype=bool)

在这里,我正在阅读文件句柄中的每一行,然后对于该行上的每个字段,我将其与 string 进行比较'T'。这将给出一个布尔结果,可以按预期将其存储在您的数据数组中。

您提供的代码的问题是 Python 正在尽最大努力将您提供的值转换为布尔值;但是,在 Python 中,非空字符串在转换True为布尔值时计算为:bool('T') == bool('F') == bool('0') == bool('1') == True

于 2013-08-22T16:13:30.253 回答