我试图将一些数据保存到python中。数据由一系列文本分隔文件组成。问题是文件有不同的len(),我在阅读之前不知道len()。 我试图知道是否可以将文件保存在2D数组中,如下所示:
s1 s2 s3 s4 s5 ..
s1 s2 s3 s4 s5 ..
.. s2 s3 .. s5 ..
.. .. s3 s5 ..
s5 ..
在这种情况下,如果我想访问信号1中的所有值,我会做出类似这样的事情: S [:,0]
我也在考虑在for循环中实现它。 read_data是一个函数,它返回一个包含已处理文件的数组,并且文件包含一个包含所有文件路径的列表
for i in range(len(files)):
all_files[:,i] = read_data(files[i])
但是,由于我之前没有启动all_files,因此无效。与此同时,如果我想在阅读之前启动all_files,我将努力知道" vertical"我将使用尺寸,因为"水平"应该更容易:len(文件)。
答案 0 :(得分:2)
我会在列表中收集文件数据 - 列表列表 - 然后担心之后将其重新打包为数组。附加到列表上很便宜。
e.g。
all_files = []
for i in range(len(files)):
all_files.append(read_data(files[i]))
现在,您可以获取文件数量N=len(all_files)
和最大长度M=max(len(f) for f in all_files)
等信息。
all_data = np.zeros((N,M)), dtype=???)
for i in range(N):
all_data[i,:] = pad_function(all_files[i])
其中pad_function
填充一个文件中的数据以适应最大大小。
另一种方法是确定要在all_data中放置数据的位置,并创建索引向量j = [0,1,3,5,...]
:
all_data[i,j] = all_files[i]
答案 1 :(得分:1)
这可能是一种粗暴的做法,但你可以获得最大值 使用以下代码段的所有文件的长度。您可以将其用于垂直尺寸的大小。
max_len = 0
for i in len(files):
if len(files[i]) > max_len:
max_len = len(files[i])