问题标签 [numpy-memmap]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c - C mmap 和 numpy memmap 之间的差异
我有一个包含大量 N 的 32 位浮点数的文件。该文件是使用 numpys memmap 函数创建的,如下所示:
当我使用 numpy 重新加载这些系数并使用以下方法对它们求和时:
我得到值 82435.047 (这是正确的)。
但是,当我使用 C 的 mmap 读取浮点数时,如下所示:
这些数字总和为不同的值:82435.100。
有人可以帮助发现我的错误吗?也许 numpy 写入它的浮点数和 C 读取它们的方式之间存在差异?
全面披露
我实际上只是在计算这些数字的总和,以检查它们是否相同。它们的真正用途是作为 bspline 中的系数(使用所示的 einspline 库实现,例如,这里https://github.com/ahay/src/blob/master/user/cram/esc_slow2.c)。当我在 python 和 CI 中评估样条曲线时,得到不同的值。
python - 如果 sum 等于 0,则删除 numpy 2D memmap 数组
我正在使用一个memmap
充当二维数组的 numpy 对象:
删除该行总和为零的行的最佳方法是什么?
python - numpy memmap 内存使用 - 想要迭代一次
假设我在磁盘上保存了一些大矩阵。将它全部存储在内存中并不可行,所以我使用 memmap 来访问它
现在假设我想迭代这个矩阵(本质上不是以有序的方式),这样每一行都将被访问一次。
我想做这样的事情:
随着这个过程在我的计算机上进行,我的计算机变得越来越慢,并且我的 RAM 和虚拟内存使用量呈爆炸式增长。
有没有办法强制 np.memmap 使用一定数量的内存?(我知道我需要的行数不会超过我计划一次读取的行数,并且缓存不会真正帮助我,因为我只访问每一行一次)
也许相反,是否有其他方法可以按自定义顺序在 np 数组上进行迭代(类似生成器)?我可以使用 file.seek 手动编写它,但它恰好比 np.memmap 实现慢得多
do_stuff_with() 不保留对其接收到的数组的任何引用,因此在这方面没有“内存泄漏”
谢谢
python-2.7 - numpy memmap 修改文件
我在理解numpy.memmap
工作方式时遇到问题。背景是我需要numpy
通过删除条目来减少磁盘上保存的大型数组。读取数组并通过复制所需的部分来建立一个新的部分是行不通的——它只是不适合内存。所以这个想法是使用numpy.memmap
- 即在光盘上工作。她是我的代码(带有一个小文件):
运行此代码,我得到:
形成输出很明显我做错了什么:
1) memmap
s 不包含数组中设置的值,in_memmap
并且out_memmap
包含相同的值。
2)不清楚复制命令是否将任何内容复制in_memmap
到out_memmap
(由于相同的值)。在调试模式下检查in_memmap[i]
和out_memmap[i]
我得到的值:memmap([1297436307], dtype=uint32)
。那么我可以像在代码中那样分配它们还是必须使用:out_memmap[i][0] = in_memmap[i][0]
?
3)out.npy
不会被操作更新为out_memmap
值flush()
。
谁能帮我理解我在这里做错了什么。
非常感谢
python - 可以memmap pandas 系列。数据框呢?
似乎我可以通过创建 mmap'd ndarray 并使用它来初始化系列来为 python 系列的基础数据进行内存映射。
成功!它似乎s
由只读的 mem 映射的 ndarray 支持。我可以对 DataFrame 做同样的事情吗?以下失败
以下成功,但仅针对一列:
...所以我可以在不复制的情况下制作 DF。但是,这只适用于一列,我想要很多。我发现用于组合 1 列 DF 的方法: pd.concat(..copy=False), pd.merge(copy=False), ... 导致副本。
我有数千个大列作为数据文件,我一次只需要几个。我希望我能够将他们的 mmap 表示放在上面的 DataFrame 中。是否可以?
Pandas 文档让人有点难以猜测这里到底发生了什么——尽管它确实说 DataFrame “可以被认为是 Series 对象的类似 dict 的容器”。. 我开始这不再是这种情况。
我宁愿不需要 HD5 来解决这个问题。
python - 将 npy 文件附加到两个文件中具有相同列数的另一个 npy 文件
npy 文件大小约为 5 GB,RAM 约为 5 GB,因此无法同时加载两个 numpy 数组。如何加载一个 npy 文件并将其行附加到另一个 npy 文件而不加载它
python - 我可以以编程方式计算在 python 函数中实例化的对象的数量吗?
我正在写一个单元测试。它测试的东西涉及 numpy memmaps,它与 numpy ndarrays 一样,可以是引用其他 memmap 数据的“视图”(并且不需要时间来创建)或副本(需要很长时间来创建)。
我想测试在我的函数中创建了多少复制类型的 memmap,并确保在给定某些输入的情况下将其最小化。这可能吗?
python - 由 numpy memmap ndarray 支持的 Pandas DataFrame 似乎在计算期间复制数据
我希望有一个相对较大的 Pandas DataFrame,由 memmap(来自共享内存)的 ndarray 支持。我有有效的代码(如下),但是当我对数据框运行计算时,整体系统使用率(由顶部测量)上升,就好像进程正在复制数据一样。计算完成后,系统内存使用量回到基线。如果我直接使用 memmap 进行相同的计算,系统内存使用不会上升。有没有办法避免这种(显然)内存使用量的临时峰值?
(请注意,对于这两种情况,top 报告的单个 python 进程使用的内存百分比上升,FWIW。)
使用熊猫 0.20.3、numpy 1.13.1、python 2.7.11
代码 - 第一个脚本example_setup.py
,设置共享内存 memmap:
第二个脚本example_use.py
,直接使用上面的 memmap 并作为 Pandas DataFrame 的支持:
python - 如何逐步将大量数据写入内存?
我正在对大型图像数据集执行信号处理任务,将图像转换为具有特定结构的大型特征向量(number_of_transforms, width, height, depth)
。
特征向量(或coefficients
在我的代码中)太大而无法一次保存在内存中,所以我尝试将它们写入 a np.mmap
,如下所示:
这适用于我的目的,但有一个缺点:如果我想稍后加载某个“运行”的系数(transform
必须使用不同的超参数进行测试)进行分析,我必须以某种方式重建原始形状(number_of_transforms, width, height, depth)
,即必然会变得混乱。
是否有更清洁(最好与 numpy 兼容)的方式,允许我保留transform
特征向量的结构和数据类型,同时仍间歇性地将结果写入transform
磁盘?
python - Reading numpy array from file and parsing very slow
I have a binary file and I am parsing it to a numpy array in Python
like the following:
However, this is very very slow. Can anyone tell me why and how to speed it up?