2017-04-07 130 views
0

我将numpy数组的字典保存到pickle文件。然后取消它们到新的变量。代码是这样的:Python - 保存到Pickle文件中的数据类型保留

酸洗:

# here the variables 'train_dataset', 'train_labels' etc are all np arrays. 
save = { 
    'train_dataset': train_dataset, 
    'train_labels': train_labels, 
    'valid_dataset': valid_dataset, 
    'valid_labels': valid_labels, 
    'test_dataset': test_dataset, 
    'test_labels': test_labels, 
    } 
pickle.dump(save, f, pickle.HIGHEST_PROTOCOL) 

取储存:

save = pickle.load(f) 
train_dataset_new = save['train_dataset'] 
train_labels_new = save['train_labels'] 
valid_dataset_new = save['valid_dataset'] 
valid_labels_new = save['valid_labels'] 
test_dataset_new = save['test_dataset'] 
test_labels_new = save['test_labels'] 

将从泡菜文件中加载的变量也是NP阵列?如果可以的话,请详细说明一下。

感谢

回答

1

直接从docs报价:

阅读从打开的文件对象文件中的字符串,并把它解释为一个 泡菜数据流,重建和返还原物 层次。

小测试代码来检查装载的变量,它是<type 'numpy.ndarray'>的数据类型:

import numpy as np 
import pickle 

#f = open("pickled.p", "wb") 

train_dataset = np.ones(5) 
train_labels = np.ones(5) 
valid_dataset = np.ones(5) 
valid_labels = np.ones(5) 
test_dataset = np.ones(5) 
test_labels = np.ones(5) 

print type(train_dataset) # <type 'numpy.ndarray'> 
print train_dataset.shape # <5L,> 

# here the variables 'train_dataset', 'train_labels' etc are all np arrays. 
save = { 
    'train_dataset': train_dataset, 
    'train_labels': train_labels, 
    'valid_dataset': valid_dataset, 
    'valid_labels': valid_labels, 
    'test_dataset': test_dataset, 
    'test_labels': test_labels, 
    } 
pickle.dump(save, open("save.p", "wb"), pickle.HIGHEST_PROTOCOL) 

save = pickle.load(open("save.p", "rb")) 
train_dataset_new = save['train_dataset'] 
train_labels_new = save['train_labels'] 
valid_dataset_new = save['valid_dataset'] 
valid_labels_new = save['valid_labels'] 
test_dataset_new = save['test_dataset'] 
test_labels_new = save['test_labels'] 

print type(train_dataset_new) # <type 'numpy.ndarray'> 
print train_dataset_new.shape # <5L,>