python - numpy.unpackbits 的懒惰版本
问题描述
我numpy.memmap
过去只将数组的一部分加载到我需要的内存中,而不是加载整个巨大的数组。我想对bool
数组做同样的事情。
不幸的是,bool
memmap 数组的存储并不经济:根据ls
, memmap 文件需要与相同数组形状bool
的 memmap 文件一样多的空间。uint8
所以我用它numpy.unpackbits
来节省空间。不幸的是,它似乎并不懒惰:它很慢并且可能导致 a MemoryError
,因此显然它将数组从磁盘加载到内存中,而不是在数组上提供“bool
视图” uint8
。
因此,如果我只想bool
从文件中加载数组的某些条目,我首先必须计算uint8
它们属于哪些条目,然后应用于该条目numpy.unpackbits
,然后再次对其进行索引。
难道没有一种懒惰的方式来获得bool
对位压缩的 memmap 文件的“视图”吗?
解决方案
不可能。位压缩数组的内存布局与您要查找的内容不兼容。数组布局的 NumPy shape-and-strides 模型没有子字节分辨率。即使您要创建一个模拟您想要的视图的类,尝试将它与正常的 NumPy 操作一起使用也需要物化 NumPy 可以使用的表示,此时您将不得不花费您不想要的内存花费。
推荐阅读
- vue.js - 使用 vue.js 和 asp.net web api 上传文件时出现运行时异常?
- javascript - 如何使用 JavaScript 过滤 Json 文件中的结果?
- cypress - 使用 cypress 提示登录
- typescript - 仅部分符合给定联合类型的数据——为什么 TypeScript 不抱怨?
- javascript - 函数参数的值没有得到
- javascript - 如何根据Javascript中的特定条件从数组中删除一行
- database - 在实时 mongodb 机器上更新(或替换)整个数据库集合的最佳方法是什么?
- c# - 我可以像这样使用一段时间来控制时间吗?
- php - PHP shell_exec() 不解析另一个目录中的 php 文件
- c++ - while(cin) 的真正含义是什么?