问题标签 [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 投票
0 回答
354 浏览

python - numpy.memmap 如何在具有多个数据集的 HDF5 上工作?

我正在尝试在 HDF5 文件中对单个数据集进行内存映射:

但是,下面的输出表明 中的值与 中的值fp不匹配dset01

我猜,也许我应该设置一个“偏移”值np.memmap。这是我代码中的错误吗?如果是这样,我如何找出 HDF5 中每个数据集的正确偏移值?

0 投票
1 回答
256 浏览

python - 如何可视化以 numpy memmap 格式读取的大文件?

我正在尝试读取 czi 格式的图像,但是因为它们需要大量内存,所以我尝试在 memmap 文件中读取它们。

这是我使用的代码>

现在 imageArr 是 memmap 中维度为 (9,3,29584,68084,1) 的变量。这些是来自 Carl Zeiss 设备的高分辨率显微图像。

这是更多规格的屏幕截图。 ImageArr 规格

我认为这意味着 imageArr 包含 9 个尺寸为 (29584,68084,3) 的图像,但我无法提取这种 numpy 数组来可视化为图像。请您帮我将 memmap 中的 (9,3,29584,68084,1) 转换为 (29584,68084,3) 图像。

0 投票
0 回答
29 浏览

python - 在大型二进制文件中重新排序行的最佳方法是什么?

我有一些想要连接的大型数据文件(32 x 非常大)。但是,数据是按错误的顺序收集的,所以我还需要对行重新排序。

到目前为止,我正在做的是:

我实际上是在一个包含 2 个以上文件的 for 循环中执行此操作的,但是您明白了。

这是最有效的方法吗?恐怕应用程序channel_mapping会将数据写入内存并减慢整个过程。事实上,这比简单地连接文件要慢得多。

0 投票
0 回答
242 浏览

python - 如何使用 numpy memmap 将 numpy 数组完全放在 RAM 上?

我想使用一个memmap分配的numpy数组,可以使用joblib并行处理,即不同进程之间的共享内存。但我也希望大数组完全存储在 RAM 上,以避免 memmap 对磁盘进行写入/读取。我有足够的 RAM 来存储整个数组,但是使用 np.zeros() 而不是 memmap 会使并行化复杂化,因为前者将内存分配给进程本地。我如何实现我的目标?

例子:

之后:

如果我用 np.zeros 分配 x_shared ,如下所示,我不能使用并行化。

0 投票
0 回答
36 浏览

python - numpy memmap 一次可以处理的最大进程数是多少?

我在这里看到对于多处理,应该使用 numpy memmaps

https://joblib.readthedocs.io/en/latest/parallel.html#working-with-numerical-data-in-shared-memory-memmapping

由于这个问题经常发生在基于 numpy 的数据结构的科学计算中,joblib.Parallel 为大型数组提供了一种特殊处理,以自动将它们转储到文件系统上,并将引用传递给 worker 以使用 numpy 将它们作为该文件上的内存映射打开numpy.ndarray 的 .memmap 子类。这使得在所有工作进程之间共享一段数据成为可能。

我想知道 memmap 是否可以处理最大数量的进程。我问是因为我的 jupyter notebook 似乎在 24 个进程访问同一个大内存映射时崩溃了。如果这是由于数量或流程造成的,我正在尝试隔离。

0 投票
1 回答
675 浏览

python - 在 mmap_mode 中 Numpy 加载 *.npz 文件的一部分

我知道已经存在类似的问题,但尚未得到回答。

我有一个非常大的 numpy 数组保存在 npz 文件中。我不希望它被完全加载(我的 RAM 无法完全处理它),而只想加载它的一部分。

文件是这样生成的:

这就是我想加载它的方式:

现在,要实际访问我感兴趣的数组部分,我应该输入

但是虽然这块很小,python 首先加载整个数组(我知道是因为我的 RAM 被填满了),然后显示这个小部分。如果我直接写也会发生同样的情况

我究竟做错了什么?

0 投票
0 回答
294 浏览

numpy - 当可用 RAM 小于文件大小时,Numpy memmap 使用 Pytorch Dataloader 节流

我正在处理一个太大而无法放入 RAM 的数据集。我目前正在尝试的解决方案是使用 numpy memmap 使用 Dataloader 一次加载一个样本/行。解决方案如下所示:

可用的 RAM 量大于 memmap 文件的大小时,数据加载速度很快。我得到大约60 批次/秒。但是,当可用 RAM 小于 memmap 文件的大小时,我得到大约 3 batches/second

我在尝试不同大小的 memmap 文件时发现了这一点。

为什么会这样?如果 Dataloader + memmap 将在可用 RAM < memmap 文件大小时节流,这将破坏解决方案的要点。

我观察到,当可用 RAM < memmap 文件大小时,磁盘 i/o 的读取速度为 500MB/s。这远高于加载一批 4096 个样本(接近 8MB/s)所需的理论读取量。

0 投票
1 回答
164 浏览

python - 改组和导入保存的 numpy 文件的几行

我有 2 个保存的 .npy 文件:

X_train 是猫和狗的图像(猫在第一半,狗在第二半,未打乱),并用 Y_train 映射为 0 和 1。因此 Y_train 是 [1,1,1,1,1,1,.... .....,0,0,0,0,0,0]。

我想随机导入 X 中的 256 张图像(猫和狗图像均占近 50-50%)及其在 Y 中的映射。由于数据很大,我无法在我的 RAM 中导入 X_train。

因此我尝试了(第一种方法):

这给出了以下错误:

我也尝试过(第二种方法):

这输出:

在第二种方法中,我将只获得猫图像,因为 np.memmap 将仅收集第 256 张图像。那么洗牌就没有用了。

请告诉我如何用任何方法做到这一点。

0 投票
2 回答
397 浏览

python - 如何读取大文本文件避免逐行读取 :: Python

我有一个大数据文件(N,4),我正在逐行映射。我的文件是 10 GB,下面给出了一个简单的实现。虽然以下工作,但它需要大量的时间。

我想实现这个逻辑,以便直接读取文本文件并且我可以访问元素。此后,我需要根据第 2 列元素对整个(映射的)文件进行排序。

我在网上看到的示例假设d使用较小的数据(f[:] = d[:]d

PS:我知道如何使用 加载文件np.loadtxt并对其进行排序argsort,但是对于 GB 文件大小,该逻辑失败(内存错误)。将不胜感激任何方向。

0 投票
0 回答
163 浏览

python - 如何在 Python 中对 HDF5 文件进行排序

我正在使用 h5py 包在 HDF5 文件中存储一个大文本文件(10 GB,N 行和 4 列)。主要是因为我不想使用我的 RAM。

我想根据第二列对文件中的项目进行排序。关于如何做到这一点的任何建议?

我也听说可以分块完成,请问有什么帮助吗?

谢谢!