第一篇文章,请温柔。
由于[原因],与我合作的每个人都总是鼓励我从MATLAB
切换到python
进行数据后处理。
生成的数据输出到.txt
文件中,该文件只是一堆空格分隔的数字,在几行中。
我目前的代码只有这个:
> import numpy
>
> filepath='data.txt'
>
>
>
> with open(filepath) as file:
>
> data=[float(s) for s in file.read().split()]
我认为这应该做的是照顾空间描绘器,并获得list
所有数据。然后我可以使用行数来弄清楚如何将列表重新排列成一个数组(旁注:我应该只使用numpy.loadtxt()
来执行此操作吗?)。
唯一的问题是我的.txt
文件中的某些数字未正确转换为float
。例如,文件中的大多数数字看起来都像"0.900000000E-2"
,并且转换得很好。但是,一些非常小的数字不是用适当的科学记数法编写的,并且显示为"1.23456789-117."
预期的数字,当然是1.23456789E-117
。
Matlab在导入function
上有一个内置工具,它取代了"不可重复的"带有____的单元格,其中____可以是NaN
,或0
,或任何合适的单元格。如何在我调用之前将这样的内容编入我的代码中导入数据,以便将所有strings
更改为floats
?
谢谢!
答案 0 :(得分:3)
使用numpy.genfromtxt
。使用loose=True
(默认值),它会使用NaN
填充无效数据:
numpy.genfromtxt(file, loose=True)
# or if you'd rather type less
numpy.genfromtxt(file)
您可以使用filling_values
参数指定要用于代替无效数据的值:
numpy.genfromtxt(file, loose=True, filling_values=0)
要对无效数据抛出异常,您可以指定loose=False
:
numpy.genfromtxt(file, loose=False)