将多个数据文件合并到np.arrays中,这些数据存储在字典中

时间:2015-07-31 18:53:45

标签: python arrays python-2.7 numpy dictionary

我正在尝试加载大型数据集。我有大约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]

1 个答案:

答案 0 :(得分:0)

如果我很好地解释了你的代码,并且在n_measurement用于提供总测量数的情况下,你宁愿做这样的事情:

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

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