我尝试用数组中的数据更新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就像解决方案来节省内存...相关推荐

  1. 用python画的炫酷图形_推荐一个炫酷Python 手绘图形库

    https://github.com/chenjiandongx/cutecharts 今天,给大家介绍一个很酷的 Python 手绘风格可视化神包:cutecharts.和 Matplotlib . ...

  2. python数据分析神器_牛逼啊!一个随时随地写Python代码的神器

    作者: Leoxin 公众号:菜鸟学Python 现在学Python的人越来越多,很多小伙伴都非常有激情.利用碎片时间随时随地学习Python, 大家知道Python是一门编程语言,但是学语言光看不练 ...

  3. python新手入门项目推荐_推荐:一个适合于Python新手的入门练手项目

    随着人工智能的兴起,国内掀起了一股Python学习热潮,入门级编程语言,大多选择Python,有经验的程序员,也开始学习Python,正所谓是人生苦短,我用Python 有个Python入门练手项目, ...

  4. python四维数组代表图像_【Python进阶】你真的明白NumPy中的ndarray吗?

    欢迎来到专栏<Python进阶>.在这个专栏中,我们会讲述Python的各种进阶操作,包括Python对文件.数据的处理,Python各种好用的库如NumPy.Scipy.Matplotl ...

  5. python hello world重复_查找数组中重复的数字-python版

    题目一:找出数组中重复的数字 在一个长度为n的数组中,数字在0~n-1范围内,数组中某些数字是重复的,但是不知道重复几个,也不知道重复几次,请找出数组中任意一个重复的数字 解法一:可以先将数据进行排序 ...

  6. python 取数组最后一个_在Python中获取列表的最后一个元素

    在Python中,你如何得到列表的最后一个元素? 为了得到最后一个元素, 不用修改列表, 假设你知道该列表有最后一个元素(即它是非空的) 传递-1给下标符号: >>> a_list ...

  7. 大小写字母转换问题: 将从键盘读入的小写字母转换成大写字母向屏幕输出,同时输出该大写字母的ASCII码值和所占的内存空间大小。(输入输出中的◊代表一个空格)输入一行:小写字母输出两行:第一

    #include <stdio.h> int main() {printf("please input a lowercase:");char a,b;a=getcha ...

  8. 在python中可以用什么关键字来声明一个类_3. Python基础语法

    注释 我们在文言文中经常会看到注释,注释可以帮助读者对文章的理解.代码中的注释也是一样,优秀的代码注释可以帮助读者对代码的理解.当然在代码编写过程中,注释的使用不一定只是描述一段代码,也可能的是对代码 ...

  9. python段子_让Python给你讲笑话、段子,一个有趣的Python案例

    前言 文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 作者:番茄哈哈 ps:如有需要python学习资料的小伙伴可以加点击下方链接 ...

最新文章

  1. 推荐一款高端大气上档次的在线作图工具
  2. [原创] 为Visio添加公式编辑器工具栏按钮
  3. 大数据搜索选开源还是商业软件?ElasticSearch 对比 Splunk
  4. STM32的I2C特性及架构
  5. python使曲线变得平滑_如何在Python中平滑数据?
  6. UnicodeDecodeError: 'gbk' codec can't decode byte 0xd2 in position 85: illegal multibyte sequence
  7. docker管理应用程序数据、容器网络
  8. selenium模拟点击的几种方法探讨
  9. python程序员专用壁纸_Python程序员必用的电脑桌面
  10. Linux百度车牌识别api,PC端车牌识别SDK
  11. JN5169 ZigBee 3.0 协议栈之 ZPS 配置编辑器
  12. 计算机组装流程是什么,组装电脑的步骤
  13. python脚本运行越来越慢
  14. 用Python写个「倒计时」软件
  15. 弘辽科技:商家直通车操作
  16. 使用条件随机场模型解决文本分类问题(附Python代码)
  17. webrtc进阶-信令篇-之三:信令、stun、turn、ice
  18. python dataframe是什么_什么是Pandas的DataFrame?
  19. java聊天室持续监听,[Java聊天室server]实战之二 监听类
  20. 我们的管理:部门管理

热门文章

  1. Android UI开发第三十篇——使用Fragment构建灵活的桌面
  2. 浅析图片XSS中的哪些技术问题
  3. Material DesignDrawerLayout的旋转箭头的实现方式。
  4. 《Flink官方文档》示例总览
  5. RSS - 简单方便的follow资讯
  6. 会员系统中需要验证用户的邮箱是否真实存在
  7. 虚拟化部署之Hyper-V虚拟网络配置
  8. Linux操作系统下共享文件夹设置方法介绍
  9. android闹钟例子,自己软件中调用android系统闹钟
  10. 【Python学习系列十三】Python机器学习库scikit-learn实现逻辑回归