Leo*_*fox 3 python arrays floating-point file-io
我正在从文件中读取行,然后使用它们.每行仅由浮点数组成.
我几乎把所有东西都整理成将数据转换成数组.
我基本上做(伪拷贝代码)
line=file.readlines()
line=line.split(' ') # Or whatever separator
array=np.array(line)
#And then iterate over every value casting them as floats
newarray[i]=array.float(array[i])
Run Code Online (Sandbox Code Playgroud)
这可行,但似乎有点违反直觉和反麻痹,我想知道是否有更好的方法来处理文件的输入,最后有一个充满浮点数的数组.
快速回答:
arrays = []
for line in open(your_file): # no need to use readlines if you don't want to store them
# use a list comprehension to build your array on the fly
new_array = np.array((array.float(i) for i in line.split(' ')))
arrays.append(new_array)
Run Code Online (Sandbox Code Playgroud)
如果您经常处理这种数据,csv模块将有所帮助.
import csv
arrays = []
# declare the format of you csv file and Python will turn line into
# lists for you
parser = csv.reader(open(your_file), delimiter=' '))
for l in parser:
arrays.append(np.array((array.float(i) for i in l)))
Run Code Online (Sandbox Code Playgroud)
如果你觉得狂野,你甚至可以完成这个完整的声明:
import csv
parser = csv.reader(open(your_file), delimiter=' '))
make_array = lambda row : np.array((array.float(i) for i in row))
arrays = [make_array(row) for row in parser]
Run Code Online (Sandbox Code Playgroud)
如果你真的想让你的同事讨厌你,你可以做一个班轮(不是所有的PYTHONIC :-):
arrays = [np.array((array.float(i) for i in r)) for r in csv.reader(open(your_file), delimiter=' '))]
Run Code Online (Sandbox Code Playgroud)
剥离所有锅炉板和灵活性,你可以得到一个干净,可读的内衬.我不会使用它,因为我喜欢使用的反射潜力csv,但它可能是好的.这是一个灰色区域,所以我不会说它是Pythonic,但它确实很方便.
arrays = [np.array((array.float(i) for i in l.split())) for l in open(your_file))]
Run Code Online (Sandbox Code Playgroud)
如果你想要一个numpy数组,文本文件中的每一行都有相同数量的值:
a = numpy.loadtxt('data.txt')
Run Code Online (Sandbox Code Playgroud)
没有numpy:
with open('data.txt') as f:
arrays = list(csv.reader(f, delimiter=' ', quoting=csv.QUOTE_NONNUMERIC))
Run Code Online (Sandbox Code Playgroud)
或者只是:
with open('data.txt') as f:
arrays = [map(float, line.split()) for line in f]
Run Code Online (Sandbox Code Playgroud)