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

Posted

技术标签:

【中文标题】将多个数据文件组合成 np.arrays,存储在字典中【英文标题】:Combine multiple data files into np.arrays, which are stored in dictionaries 【发布时间】:2015-10-23 13:08:22 【问题描述】:

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

【问题讨论】:

我不确定我是否理解整个问题,但是像这样的工作,即结合两个字典吗? ***.com/questions/38987/… 或:***.com/questions/1781571/… @db1234 不会。 all_datafile_data 中的键是相同的。存储在all_data 中的数组长度约为 6M。存储在file_data 中的数组长度小于 1k。每个file_data 都包含我尝试加入的时间序列,按顺序在all_data 中。 为了更清楚,请提供一些示例数据结构以及所需的字典、列表等。请解释 $file_data$ 是什么意思,为什么使用“$”字符 @GeorgeSolymosi $file_data$ 是一种类型。它应该已经读取了 file_data。 file_data 只是我从单个数据文件加载的 numpy 数组的字典。我已将数据示例添加到原始帖子中。 也许对文件进行循环并附加密钥。类似于:all_data['a'].append(file_data['a']) 【参考方案1】:

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

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

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

【讨论】:

抱歉混淆 all_measurements 已经做了类似的事情。我已经编辑了代码以反映它的实际作用。 @user1200989 try finally 子句的目的是什么? @GeorgeSoymosi 使用 one_file() 加载的一些文件中有错误,我不想加载它们。 try/finally 子句允许我捕获错误(现在显示)并加载跳过数据中相应部分的下一个文件。 @user1200989 请从这里获取数据 sn-p:“all_data 的行为就好像键:值对中的每个值都相同”【参考方案2】:

原来一切都进入同一个容器。上述代码已修改,问题已更正。

【讨论】:

以上是关于将多个数据文件组合成 np.arrays,存储在字典中的主要内容,如果未能解决你的问题,请参考以下文章

C# LanguageExt - 将多个异步调用组合成一个分组调用

将多个查询组合成一个查询

如何将多个PNG组合成一个大的PNG文件?

如何使用 webpack 将多个节点 js 文件组合成一个包

requirejs - 将多个文件组合成一个不依赖于 requirejs 的 js 文件

如何获取多个Sample()矢量输出并将它们组合成一个数据帧