python 内存不足 dict 替代方案_2D数组代表一个巨大的python dict,COOrdinate就像解决方案来节省内存...
我尝试用数组中的数据更新dict_with_tuples_key:
myarray = np.array([[0, 0], # 0, 1
[0, 1],
[1, 1], # 1, 2
[1, 2], # 1, 3
[2, 2],
[1, 3]]
) # a lot of this with shape~(10e6, 2)
dict_with_tuples_key = {(0, 1): 1,
(3, 7): 1} # ~10e6 keys
使用数组来存储dict值,(感谢@MSeifert)我们得到了这个:
def convert_dict_to_darray(dict_with_tuples_key, myarray):
idx_max_array = np.max(myarray, axis=0)
idx_max_dict = np.max(dict_with_tuples_key.keys(), axis=0)
lens = np.max([list(idx_max_array), list(idx_max_dict)], axis=0)
xlen, ylen = lens[0] + 1, lens[1] + 1
darray = np.zeros((xlen, ylen)) # Empty array to hold all indexes in myarray
for key, value in dict_with_tuples_key.items():
darray[key] = value
return darray
@njit
def update_darray(darray, myarray):
elements = myarray.shape[0]
for i in range(elements):
darray[myarray[i][0]][myarray[i][1]] += 1
return darray
def darray_to_dict(darray):
updated_dict = {}
keys = zip(*map(list, np.nonzero(darray)))
for x, y in keys:
updated_dict[(x, y)] = darray[x, y]
return updated_dict
darray = convert_dict_to_darray(dict_with_tuples_key, myarray)
darray = update_darray(darray, myarray)
我得到了所需的确切结果:
# print darray_to_dict(darray)
# {(0, 1): 2.0,
# (0, 0): 1.0,
# (1, 1): 1.0,
# (2, 2): 1.0,
# (1, 2): 1.0,
# (1, 3): 1.0,
# (3, 7): 1.0, }
对于小矩阵,它的工作状态很好,@ njit可以在它上面工作,所以速度非常快,
但…
巨大的空darray = np.zeros((xlen,ylen))的创建不适合记忆.我们如何避免分配一个非常稀疏的数组,并且只在COOrdinate格式中存储非空值(如稀疏矩阵)?
最佳答案 使用来自scipy的dok_matrix; dock_matrix是基于密钥的稀疏矩阵的字典.它们允许您逐步构建稀疏矩阵,并且它们不会分配不适合您的计算机内存的巨大的空darray = np.zeros((xlen,ylen)).
唯一要做的更改是从scipy导入正确的模块,并在函数convert_dict_to_darray中更改darray的定义.
它看起来像这样:
from scipy.sparse import dok_matrix
def convert_dict_to_darray(dict_with_tuples_key, myarray):
idx_max_array = np.max(myarray, axis=0)
idx_max_dict = np.max(dict_with_tuples_key.keys(), axis=0)
lens = np.max([list(idx_max_array), list(idx_max_dict)], axis=0)
xlen, ylen = lens[0] + 1, lens[1] + 1
darray = dok_matrix( (xlen, ylen) )
for key, value in dict_with_tuples_key.items():
darray[key[0], key[1]] = value
return darray
python 内存不足 dict 替代方案_2D数组代表一个巨大的python dict,COOrdinate就像解决方案来节省内存...相关推荐
- 用python画的炫酷图形_推荐一个炫酷Python 手绘图形库
https://github.com/chenjiandongx/cutecharts 今天,给大家介绍一个很酷的 Python 手绘风格可视化神包:cutecharts.和 Matplotlib . ...
- python数据分析神器_牛逼啊!一个随时随地写Python代码的神器
作者: Leoxin 公众号:菜鸟学Python 现在学Python的人越来越多,很多小伙伴都非常有激情.利用碎片时间随时随地学习Python, 大家知道Python是一门编程语言,但是学语言光看不练 ...
- python新手入门项目推荐_推荐:一个适合于Python新手的入门练手项目
随着人工智能的兴起,国内掀起了一股Python学习热潮,入门级编程语言,大多选择Python,有经验的程序员,也开始学习Python,正所谓是人生苦短,我用Python 有个Python入门练手项目, ...
- python四维数组代表图像_【Python进阶】你真的明白NumPy中的ndarray吗?
欢迎来到专栏<Python进阶>.在这个专栏中,我们会讲述Python的各种进阶操作,包括Python对文件.数据的处理,Python各种好用的库如NumPy.Scipy.Matplotl ...
- python hello world重复_查找数组中重复的数字-python版
题目一:找出数组中重复的数字 在一个长度为n的数组中,数字在0~n-1范围内,数组中某些数字是重复的,但是不知道重复几个,也不知道重复几次,请找出数组中任意一个重复的数字 解法一:可以先将数据进行排序 ...
- python 取数组最后一个_在Python中获取列表的最后一个元素
在Python中,你如何得到列表的最后一个元素? 为了得到最后一个元素, 不用修改列表, 假设你知道该列表有最后一个元素(即它是非空的) 传递-1给下标符号: >>> a_list ...
- 大小写字母转换问题: 将从键盘读入的小写字母转换成大写字母向屏幕输出,同时输出该大写字母的ASCII码值和所占的内存空间大小。(输入输出中的◊代表一个空格)输入一行:小写字母输出两行:第一
#include <stdio.h> int main() {printf("please input a lowercase:");char a,b;a=getcha ...
- 在python中可以用什么关键字来声明一个类_3. Python基础语法
注释 我们在文言文中经常会看到注释,注释可以帮助读者对文章的理解.代码中的注释也是一样,优秀的代码注释可以帮助读者对代码的理解.当然在代码编写过程中,注释的使用不一定只是描述一段代码,也可能的是对代码 ...
- python段子_让Python给你讲笑话、段子,一个有趣的Python案例
前言 文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 作者:番茄哈哈 ps:如有需要python学习资料的小伙伴可以加点击下方链接 ...
最新文章
- 推荐一款高端大气上档次的在线作图工具
- [原创] 为Visio添加公式编辑器工具栏按钮
- 大数据搜索选开源还是商业软件?ElasticSearch 对比 Splunk
- STM32的I2C特性及架构
- python使曲线变得平滑_如何在Python中平滑数据?
- UnicodeDecodeError: 'gbk' codec can't decode byte 0xd2 in position 85: illegal multibyte sequence
- docker管理应用程序数据、容器网络
- selenium模拟点击的几种方法探讨
- python程序员专用壁纸_Python程序员必用的电脑桌面
- Linux百度车牌识别api,PC端车牌识别SDK
- JN5169 ZigBee 3.0 协议栈之 ZPS 配置编辑器
- 计算机组装流程是什么,组装电脑的步骤
- python脚本运行越来越慢
- 用Python写个「倒计时」软件
- 弘辽科技:商家直通车操作
- 使用条件随机场模型解决文本分类问题(附Python代码)
- webrtc进阶-信令篇-之三:信令、stun、turn、ice
- python dataframe是什么_什么是Pandas的DataFrame?
- java聊天室持续监听,[Java聊天室server]实战之二 监听类
- 我们的管理:部门管理