可变维数组

时间:2015-02-20 08:44:13

标签: python arrays numpy multidimensional-array signal-processing

我试图将一些数据保存到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(文件)。

2 个答案:

答案 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])
相关问题