繁体   English   中英

连接保留 numpy dtype 的 numpy 数组的字典

[英]Concatenate dicts of numpy arrays retaining numpy dtype

我在一个循环中连接 python dicts(未显示)。 我在循环的第一个实例上声明一个新的空字典(dsst_mean_all):

if station_index == 0:
    dsst_mean_all = {}
    for key in dsst_mean:                        
        dsst_mean_all[key] = []               

source = [dsst_mean_all, dsst_mean]                
    for key in source[0]:
        dsst_mean_all[key] = np.concatenate([d[key] for d in source])

然后,正如您在上面代码的第二部分中看到的那样,我将循环中获得的字典 (dsst_mean) 与将保存所有数据的大字典 (dsst_mean_all) 连接起来。

现在 dsst_mean 是一个字典,其元素是不同类型的 numpy 数组。 大多数情况下,它们是 float32。 我的问题是,如何在连接期间保留数据类型? 我的 dsst_mean_all dict 最终成为所有元素的 float64 numpy 数组。 我需要这些来匹配 dsst_mean 以节省内存并减小文件大小。 请注意,循环的所有迭代的 dsst_mean 具有相同的结构和相同 dtype 的元素。

谢谢。

您可以在列表理解中定义数组的dtype

要么硬编码:

dsst_mean_all[key] = np.concatenate([d[key].astype('float32') for d in source])

或动态:

dsst_mean_all[key] = np.concatenate([d[key].astype(d[key].dtype) for d in source])

文档: https : //docs.scipy.org/doc/numpy-1.13.0/user/basics.types.html

解决这个问题的一种方法是避免将 dsst_mean_all 声明为新的空字典。 这 - 我认为 - 这就是默认情况下所有内容都被强制转换为 float64 的原因。 使用 if/else 语句,在第一次迭代时只需将 dsst_mean_all 设置为 dsst_mean,而对于所有后续迭代,如我的原始问题所示进行连接。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM