问题标签 [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.

0 投票
1 回答
262 浏览

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 中评估样条曲线时,得到不同的值。

0 投票
0 回答
60 浏览

python - 如果 sum 等于 0,则删除 numpy 2D memmap 数组

我正在使用一个memmap充当二维数组的 numpy 对象:

删除该行总和为零的行的最佳方法是什么?

0 投票
2 回答
3045 浏览

python - numpy memmap 内存使用 - 想要迭代一次

假设我在磁盘上保存了一些大矩阵。将它全部存储在内存中并不可行,所以我使用 memmap 来访问它

现在假设我想迭代这个矩阵(本质上不是以有序的方式),这样每一行都将被访问一次。

我想做这样的事情:

随着这个过程在我的计算机上进行,我的计算机变得越来越慢,并且我的 RAM 和虚拟内存使用量呈爆炸式增长。

有没有办法强制 np.memmap 使用一定数量的内存?(我知道我需要的行数不会超过我计划一次读取的行数,并且缓存不会真正帮助我,因为我只访问每一行一次)

也许相反,是否有其他方法可以按自定义顺序在 np 数组上进行迭代(类似生成器)?我可以使用 file.seek 手动编写它,但它恰好比 np.memmap 实现慢得多

do_stuff_with() 不保留对其接收到的数组的任何引用,因此在这方面没有“内存泄漏”

谢谢

0 投票
1 回答
678 浏览

python-2.7 - numpy memmap 修改文件

我在理解numpy.memmap工作方式时遇到问题。背景是我需要numpy通过删除条目来减少磁盘上保存的大型数组。读取数组并通过复制所需的部分来建立一个新的部分是行不通的——它只是不适合内存。所以这个想法是使用numpy.memmap- 即在光盘上工作。她是我的代码(带有一个小文件):

运行此代码,我得到:

形成输出很明显我做错了什么:

1) memmaps 不包含数组中设置的值,in_memmap并且out_memmap包含相同的值。

2)不清楚复制命令是否将任何内容复制in_memmapout_memmap(由于相同的值)。在调试模式下检查in_memmap[i]out_memmap[i]我得到的值:memmap([1297436307], dtype=uint32)。那么我可以像在代码中那样分配它们还是必须使用:out_memmap[i][0] = in_memmap[i][0]

3)out.npy不会被操作更新为out_memmapflush()

谁能帮我理解我在这里做错了什么。

非常感谢

0 投票
2 回答
5928 浏览

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 来解决这个问题。

0 投票
1 回答
274 浏览

python - 将 npy 文件附加到两个文件中具有相同列数的另一个 npy 文件

npy 文件大小约为 5 GB,RAM 约为 5 GB,因此无法同时加载两个 numpy 数组。如何加载一个 npy 文件并将其行附加到另一个 npy 文件而不加载它

0 投票
0 回答
55 浏览

python - 我可以以编程方式计算在 python 函数中实例化的对象的数量吗?

我正在写一个单元测试。它测试的东西涉及 numpy memmaps,它与 numpy ndarrays 一样,可以是引用其他 memmap 数据的“视图”(并且不需要时间来创建)或副本(需要很长时间来创建)。

我想测试在我的函数中创建了多少复制类型的 memmap,并确保在给定某些输入的情况下将其最小化。这可能吗?

0 投票
0 回答
579 浏览

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 的支持:

0 投票
1 回答
187 浏览

python - 如何逐步将大量数据写入内存?

我正在对大型图像数据集执行信号处理任务,将图像转换为具有特定结构的大型特征向量(number_of_transforms, width, height, depth)

特征向量(或coefficients在我的代码中)太大而无法一次保存在内存中,所以我尝试将它们写入 a np.mmap,如下所示:

这适用于我的目的,但有一个缺点:如果我想稍后加载某个“运行”的系数(transform必须使用不同的超参数进行测试)进行分析,我必须以某种方式重建原始形状(number_of_transforms, width, height, depth),即必然会变得混乱。

是否有更清洁(最好与 numpy 兼容)的方式,允许我保留transform特征向量的结构和数据类型,同时仍间歇性地将结果写入transform磁盘?

0 投票
2 回答
724 浏览

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?