【问题标题】:Python - Datatype Retention in saving to Pickle filePython - 保存到 Pickle 文件时的数据类型保留
【发布时间】:2017-04-07 12:53:32
【问题描述】:

我正在将一个 numpy 数组字典保存到一个 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']

从 pickle 文件加载的变量也会是 np 数组吗?如果可以的话,也请详细说明一下。

谢谢

【问题讨论】:

    标签: python numpy pickle


    【解决方案1】:

    直接引用docs

    从打开的文件对象文件中读取一个字符串并将其解释为 pickle 数据流,重构并返回原始对象 层次结构。

    小测试代码检查加载变量的数据类型<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,>
    

    【讨论】:

      猜你喜欢
      • 2018-05-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-09-08
      • 1970-01-01
      • 2011-06-21
      相关资源
      最近更新 更多