【发布时间】:2017-04-09 13:10:42
【问题描述】:
我想用来自文件的一些浮点值填充一个 numpy 数组。数据会这样存储:
0 11
5 6.2 4 6
2 5 3.2 6
7 1.4 5 11
第一行给出第一个和最后一个索引,接下来的行是实际数据。我目前的方法是拆分每条数据线,在每个部分上使用float,并将值逐片存储在预先分配的数组中。这是我现在的做法:
data_file ='data.txt'
# Non needed stuff at the beginning
skip_lines = 0
with open(data_file, 'r') as f:
# Skip any lines if needed
for _ in range(skip_lines):
f.readline()
# Get the data size and preallocate the numpy array
first, last = map(int, f.readline().split())
size = last - first + 1
data = np.zeros(size)
beg, end = (-1, 0) # Keep track of where to fill the array
for line in f:
if end - 1 == last:
break
samples = line.split()
beg = end
end += len(samples)
data[beg:end] = [float(s) for s in samples]
有没有办法在 Python 中一个一个地读取数据值?
import numpy as np
f = open('data.txt', 'r')
first, last = map(int, f.readline().split())
arr = np.zeros(last - first + 1)
for k in range(last - first + 1):
data = f.read() # This does not work. Any idea?
# In C++, it could be done this way: double data; cin >> data
arr[k] = data
编辑唯一可以确定的是,前两个数字是第一个和最后一个索引,并且最后一个数据行只有最后一个数字。在数据编号之后可以有也其他的东西。所以不能只读取“第一行,最后一行”之后的所有行。
编辑 2 添加(工作)初始方法(拆分每个数据行,在每个部分上使用 float,并将值存储在预先分配的数组中,逐个切片)实现。
【问题讨论】:
-
我们是否应该将第四行末尾的
11作为一种收集结束标记? -
你的数据集有多大?
-
@BillBell 11 是最后一个条目的索引。目前,它仅用于计算数据大小(我见过的所有示例文件都有 0 作为第一个条目,但它可能会改变)。文件一般不大,都可以读入内存。典型的
first, last是0, 1023