我正在尝试加载大型数据集。我有大约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]
。
答案 0 :(得分:0)
如果我很好地解释了你的代码,并且在n_measurement
用于提供总测量数的情况下,你宁愿做这样的事情:
all_measurements = np.array(
[len(n_measurements)
for n_measurements in file_list]
)
或者如何将all_measurements.sum()
作为新的可初始化的np.array的形状?