1
1
1
6
7,8,3
6,6,8
8,7,1
我想读取该文件,然后使用零(与Matlabs dlmread()类似)填充行以匹配最大行长度。我试过的方法或者给我一个字符串或没有零的矩阵。任何帮助将不胜感激。
我的代码:
File_3min = open(File_3min, 'r')
array = File_3min.readlines()
data = []
for i in array:
data.append(i)
numpy_fillna(data)
将零添加到不满足最大行长度的行的函数。
import numpy as np
def numpy_fillna(data):
lens = np.array([len(i) for i in data])
mask = np.arange(lens.max()) < lens[:,None]
out = np.zeros(mask.shape, dtype=data.dtype)
out[mask] = np.concatenate(data)
return out
答案 0 :(得分:1)
首先,使用上下文with
语句打开文件,以便在完成后正常关闭,只是为了良好的练习
with open(File_3min, 'r') as File_3min:
lines = [line.strip().split(',') for line in File_3min]
请注意,我还使用split(',')
从每行中获取列表,并使用strip()
获取没有空格和换行符的所有行
现在你可以获得这样的行的最大长度:
max_len = max(len(line) for line in lines)
既然您同时拥有一条线的最大长度和线条数(使用len(lines)
),您可以创建一个正确形状的numpy数组,稍后将被填充:
my_array = np.zeros([len(lines), max_len])
现在要实际填充数组,你可以做到这一点,这不是很好,但它可以工作:
for i, line in enumerate(lines):
my_array[i, :len(line)] = line
现在my_array
中的所有内容都是等长的行/行,用零填充,是文件中的行。
答案 1 :(得分:0)
array = """1
1
1
6
7,8,3
6,6,8
8,7,1""".split('\n')
data = []
for i in array:
data.append([float(x) for x in i.strip().split(',')])
data_max = max([len(x) for x in data])
out = np.array([x + list(np.zeros(data_max - len(x))) for x in data])