我有一些数据文件包含Fortran代码的布尔输出:
write(23,'(L2)') data
因此,文件的一部分将如下所示:
F F T F ...
我想用Python中的numpy.asarray()函数读取这个文件,因为这样很容易转换数据,例如:
data = asarray(f.readline().split(),'bool')
但是,无论数据是什么,Python总是返回一个包含所有’True’的数组.
我也尝试写成’False False False …’或’0 0 1 0 ……’,但它们都没有用.
我想知道是否有办法使用asarray()来实现这一目标?或者任何其他可以在不使用循环的情况下转换布尔数据的建议?
解决方法:
一种方法是对输入文件的每个字符串进行更多处理,以获得您期望的结果:
with open('input.dat') as handle:
data = asarray([[x == 'T' for x in line.strip().split()]
for line in handle],
dtype=bool)
在这里,我正在读取文件句柄中的每一行,然后对于该行中的每个字段,我将其与字符串“T”进行比较.这将给出一个布尔结果,可以按预期存储在数据数组中.
您提供的代码的问题是Python正在尽力将您提供给它的值转换为布尔值;但是,在Python中非空字符串在转换为布尔值时评估为True:bool(‘T’)== bool(‘F’)== bool(‘0’)== bool(‘1’)== True.
标签:python,arrays,numpy,boolean
来源: https://codeday.me/bug/20190725/1533365.html