问题标签 [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 回答
1054 浏览

python - SimpleITK 读取图像切片

祝大家有美好的一天。

我的 HDD (9.7 Gb) 上碰巧有一个非常大的 .mha 文件,它是大脑的 3D 图像。我知道这张图片的形状,并且出于报告的需要,我想提取它的一部分,以获得可以保存为 .png 的 2D 图像。

问题是我的 16 Gb RAM 计算机不允许我加载完整的图像,因此我想知道是否有一种方法可以提取该图像的 2D 切片而不将整个图像加载到 RAM 中。对于较小的图像,我使用sitk.GetArrayFromImage(sitk.ReadImage(fileName))并输入它,pyplot.imshow()但这意味着加载我想要避免的整个图像。

我想了一段时间来numpy.memmap创建一个临时.npy文件,我可以在其中存储整个数组,然后获取它的一部分,但是我无法使用sitk.GetArrayFromImage(sitk.ReadImage(fileName)).

有谁知道如何做到这一点?

提前致谢 !

0 投票
1 回答
416 浏览

python - 如何在 keras 生成器中使用 numpy memmap 不超过 RAM 内存?

我正在尝试在生成器中实现 numpy.memmap 方法,以使用 keras 训练神经网络,以免超过内存 RAM 限制。我将这篇文章用作参考,但没有成功。这是我的尝试:

尽管如此,它仍然将块保存在 RAM 内存中,因此在一些时期后它会超过其限制。

谢谢

0 投票
1 回答
528 浏览

deep-learning - 比较深度学习中数据加载方法的效率

我需要加载时间序列数据集来训练网络。当我从原始数据中提取这些文件时,由于内存问题,数据集被分成许多块train_x_0.npy, train_x_1.npy, ..., train_x_40.npy(41 块) 。.npy但是,它们的大小太大(大约 1000 GB),我无法将所有内容加载到 RAM 中。我一直在考虑两种方法来解决这个问题。

  1. np.load()使用with 参数加载数据块mmap_mode='r+'。内存映射的块存储在 Python list 中self.data。在__getitem__(self, idx)PytorchDataset类的方法中,我转换idxchunk_idxand sample_idx,然后通过self.data[chunk_idx][sample_idx].
  2. 从原始数据中再次提取.npy文件,并逐个样本保存数据,即一个.npy文件现在是一个样本,而不是一个数据块。在该__getitem__(self, idx)方法中,我将通过使用np.load(sample_path).

假设 PytorchDataLoader将用于遍历所有样本,那么哪种方法会更快?

如果您对提取原始数据或加载.npy文件有其他建议,请分享您的意见。

0 投票
0 回答
29 浏览

python - 有没有办法知道 numpy.memmap 当前使用了多少内存?

我想调查一个使用 numpy.memmap 从大文件访问数据的 python 程序的内存使用情况。有没有办法检查内存映射当前使用的内存大小?我在 numpy 对象和对象的 _mmap 属性上尝试了 sys.getsizeof,但是无论使用了多少 memmap 对象,两者都给出了相同的非常小的大小。

0 投票
1 回答
24 浏览

numpy - 这个numpy memmap create / save / load有什么问题,它似乎没有保存

我首先创建一个 memmap,加载一些随机数,然后将其删除以将其保存到文件中:

然后当我再次加载它时,我只得到零:

出于某种原因,它不保存随机数?我正在使用谷歌 Colab。

0 投票
0 回答
90 浏览

python - Numpy 内存映射加载不拥有数据

假设我创建了一个数组,保存并加载它:

为什么作为内存映射加载会失去数据的所有权?我想就地调整大小,但由于所有权,这是不可能的。

0 投票
0 回答
106 浏览

python - 加载大型 numpy 数组的开销

我的问题很简单;我找不到可以回答它的资源。有点类似的链接使用 asarray一般来说这里是最简洁的一个

如何“计算”将 numpy 数组加载到 RAM 中的开销(如果有任何开销)?或者,如何确定将所有数组保存在内存中所需的最少 RAM 量(无需耗时的反复试验)?

简而言之,我有几个 shape 的 numpy 数组(x, 1323000, 1),其中 x 高达6000. 这导致最大文件的磁盘使用量为 30GB。

所有文件一起需要50GB。因此,如果我使用略多于50GB 的 RAM(使用 Kubernetes)就足够了吗?我想尽可能高效地使用 RAM,所以100不能只使用 GB。

0 投票
0 回答
53 浏览

python - 如何使用带有 memmap 的存储 ndarray 的 ndarray 作为一个大的 ndarray 张量

我最近开始使用 numpy memmap 在我的项目中链接一个数组,因为我有一个 3 维张量,用于作为示例的数据集图的总共 1330 亿个值。

我正在尝试计算 5748 个节点图(DD 数据集的第 21 个)的热核签名。我计算投影仪的代码(我使用 memmap 的地方)是:

在所有的X_hks.npy里面都有一个 n ndarray(来自示例 5748 * 5748)。

然后我希望所有这些计算数组形成 3 维张量,所以我以这种方式“链接”(我不知道这是否是正确的术语)它们:

P稍后仅用于循环内部H = np.einsum('ijk,i->jk', P, np.exp(-unique_eval * t))

但是,这会引发错误:ValueError: einstein sum subscripts string contains too many subscripts for operand 0. 由于该方法对于不需要 memmap 的较小图形是正确的,所以我的想法是 P 对于 numpy 的结构不好,我必须安排数据,也许要进行整形。所以我试着做 aP.reshape(len(L), n, n)但它不起作用 give ValueError: cannot reshape array of size 4043 into shape (4043,5748,5748)。我怎样才能让它工作?

我已经找到了这个问题,但它不适合这种情况。我认为我不能将所有内容存储在一个大对象中,因为它包含 497GB 的 memmap 文件(每个 126MB)。如果我能做到,请告诉我。

如果不可能做到这一点,我会减少用例,但是我很感兴趣让它适用于所有可能性。

0 投票
0 回答
50 浏览

python - ndarray 是否有一个 mmap 的缓冲区?

如何判断 ndarray 是否有一个 mmap 的缓冲区?我想区分xy

0 投票
0 回答
18 浏览

python - 为什么我在将 hdr 文件加载到 memmap 时收到错误消息

以下代码是脚本中的有效部分:

但是,它给了我以下错误:

用 'r+' 替换模式不是一个有效的选项,因为它会创建一个空白文件,这会导致以后出现问题。