将多个数据文件组合成储存在字典中的np.arrays。

6 浏览
0 Comments

将多个数据文件组合成储存在字典中的np.arrays。

我正在尝试加载一个大型数据集。我有 ~8k 天的文件,每个文件中有数百个测量值的数组。我可以将一个单独的文件加载到一组 numpy 数组中,然后将其存储在一个字典中。要加载所有的天数文件,我使用所需的键初始化一个字典。然后我循环遍历文件列表,加载一个文件,并尝试将它们存储在较大的字典中。

    all_measurements = np.asarray([get_n_measurements(directory, name) for name in files])
    error_files = []
    temp = np.full(all_measurements.sum()
    all_data = {key: temp.copy(), 
                     fill_value, dtype=np.float64) for key in sample_file}
    start_index = 0
    for data_file, n_measurements in zip(file_list, all_measurements):
        file_data = one_file(data_file) # Load one data file into a dict.
        for key, value in file_data.iteritems(): # I've tried .items(), .viewitems() as well.
            try:
                all_data[key][start_index : start_index + n_measurements] = file_data[key]
            except ValueError, msg:
                error_files.append((data_file, msg))
            finally:
                start_index += n_measurements

我已经检查了 one_file() 的结果,我知道它正确地加载了数据。然而,合并的all_data的行为好像在整个key:value对中每个值都相同。

这是数据结构的一个示例:

all_data  = {'a': array([ 0.76290858,  0.83449302,  ...,  0.06186873]), 
             'b': array([ 0.32939997,  0.00111448,  ..., 0.72303435])}
file_data = {'a': array([ 0.00915347,  0.39020354]),
             'b': array([ 0.8992421 ,  0.18964702])}

在每次迭代的for循环中,我尝试将file_data插入到all_data的索引[start_index:start_index + n_measurements]中。

admin 更改状态以发布 2023年5月24日
0
0 Comments

事实证明所有内容都被放到了同一个容器中。上述代码已经做了修改并解决了这个问题。

0
0 Comments

如果我正确解释了你的代码,并且在 n_measurement 用于提供总测量次数的情况下,你更倾向于像这样做:

all_measurements = np.array(
                           [len(n_measurements) 
                           for n_measurements in file_list]
                           )

或者说 all_measurements.sum() 如何作为你的新可初始化 np.array 的形状呢?

0