将多个数据文件组合成 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_data
和 file_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 - 将多个异步调用组合成一个分组调用
如何使用 webpack 将多个节点 js 文件组合成一个包