相关疑难解决方法(0)

如何在同一个存档中保存字典和数组(使用numpy.savez)

这是第一个问题.我会尽量简明扼要.

我正在生成包含机器学习应用程序的功能信息的多个数组.由于数组没有相同的尺寸,我将它们存储在字典而不是数组中.有两种不同的功能,所以我使用两种不同的词典.

我还生成标签以配合这些功能.这些标签存储在数组中.此外,还有一些字符串包含用于运行脚本的确切参数和时间戳.

总而言之它看起来像这样:

import numpy as np    

feature1 = {}
feature2 = {}
label1 = np.array([])
label2 = np.array([])
docString = 'Commands passed to the script were...'

# features look like this:
feature1 = {'case 1': np.array([1, 2, 3, ...]),
            'case 2': np.array([2, 1, 3, ...]),
            'case 3': np.array([2, 3, 1, ...]),
            and so on... }
Run Code Online (Sandbox Code Playgroud)

现在我的目标是这样做:

np.savez(outputFile, 
         saveFeature1 = feature1, 
         saveFeature2 = feature2, 
         saveLabel1 = label1, 
         saveLabel2 = label2,
         saveString = docString)
Run Code Online (Sandbox Code Playgroud)

这似乎有效(即保存这样的文件没有抛出错误,可以再次加载).但是,当我尝试再次加载文件中的功能时:

loadedArchive = np.load(outFile)
loadedFeature1 = …
Run Code Online (Sandbox Code Playgroud)

python dictionary numpy

13
推荐指数
2
解决办法
1万
查看次数

保存和加载大型字典的最快且最有效的方法

我有个问题。我有一个巨大的dict. 我想保存并加载这个巨大的字典。但不幸的是我得到了一个MemoryError. 字典不应该太大。从数据库中读取的内容约为 4GB。我现在想保存这个字典并读出它。但是,它应该是高效的(不会消耗更多内存)并且不会花费太长时间。

目前有哪些选择?我无法进一步了解pickle,出现内存错误。我还剩 200GB 可用磁盘空间。

我查看了用 Python 保存和加载大型字典的最快方法以及其他一些问题和博客。

import pickle
from pathlib import Path

def save_file_as_pickle(file, filename, path=os.path.join(os.getcwd(), 'dict')):
    Path(path).mkdir(parents=True, exist_ok=True)
    pickle.dump( file, open( os.path.join(path, str(filename+'.pickle')), "wb" ))

save_file_as_pickle(dict, "dict")

[OUT]

---------------------------------------------------------------------------
MemoryError                               Traceback (most recent call last)
<timed eval> in <module>

~\AppData\Local\Temp/ipykernel_1532/54965140.py in save_file_as_pickle(file, filename, path)
      1 def save_file_as_pickle(file, filename, path=os.path.join(os.getcwd(), 'dict')):
      2     Path(path).mkdir(parents=True, exist_ok=True)
----> 3     pickle.dump( file, open( os.path.join(path, str(filename+'.pickle')), "wb" ))

MemoryError: 
Run Code Online (Sandbox Code Playgroud)

什么有效,但花了 1 小时并且使用了 26GB …

python dictionary pickle

6
推荐指数
1
解决办法
5161
查看次数

标签 统计

dictionary ×2

python ×2

numpy ×1

pickle ×1