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

python - 是否可以创建数组数组的 numpy.memmap?

我有一个 (4,) 数组要保存到磁盘(我正在使用的大小无法放入内存,因此我需要动态加载我需要的内容)。但是,我想把它放在一个numpy.memmap. 不确定是否可能,但任何建议将不胜感激。

我有这个没有numpy.memmap

[[1, 2, 3, 4], [2, 3, 4, 5], [3, 4, 5, 6], [4, 5, 6, 7]]

我希望能够做这样的事情:

[memmap([1, 2, 3, 4], dtype=object), memmap([2, 3, 4, 5], dtype=object), memmap([3, 4, 5, 6], dtype=object), memmap([4, 5, 6, 7], dtype=object)]

这需要我为每个数组创建不同的文件,我真的很想有一个memmap可以处理整个 4 个迷你数组的文件。有人可以提供一种方法来使用memmaps吗?

扩展 ie 的能力data.extend()很重要,因为我不知道我有多少个迷你阵列。

0 投票
0 回答
171 浏览

python - 为什么 numpy.memmap.flush() 不更新 Windows 中的文件?

我目前正在将数据从磁盘复制/重新格式化到 memmapped-numpy 数组中。我每隔约 5000 个元素调用一次 flush(),但 Windows 中的更改日期不会改变。

0 投票
2 回答
546 浏览

python - 有没有办法将 numpy unicode 数组加载到 memmap 中?

我正在尝试创建一个数组dtype='U'并使用 保存它numpy.save(),但是,当尝试将保存的文件加载到 a 时,numpy.memmap我收到与大小不是“U3”的倍数有关的错误

我正在与python 3.5.2. 我尝试了以下代码,其中创建了一个空数组和另一个包含 3 个条目的数组,所有条目的长度均为 3 个字母,然后将数组保存到file1.npy文件中。

但是,当我尝试将文件加载到 a中时numpy.memmap,出现以下错误ValueError: Size of available data is not a multiple of the data-type size.

有没有办法将数据加载到numpy.memmap使用字符串中?我觉得我错过了一些简单的东西。

0 投票
1 回答
570 浏览

python - 改组大型内存映射的numpy数组

我在一个文件中有一个(20000000, 247)大小尺寸的数组。我有可用的内存。我需要沿行对数据进行洗牌。我已经在. 但是,如果我尝试就地修改以外的任何操作,例如创建一个 random.sampled 索引数组然后返回,我会得到 MemoryError。我也尝试过改组 in 块,然后尝试堆叠块以构建完整的数组,但是. 到目前为止,我发现的唯一解决方案是加载文件,然后执行. 但是,这需要很长时间(已经 5 个小时了,它仍然被洗牌)。30 GB.npy32 GBmmap_modenp.random.permutationparray[p]MemoryErrormmap_mode = 'r+'np.random.shuffle

当前代码:

有没有更快的方法可以在不破坏内存限制的情况下做到这一点?

0 投票
0 回答
77 浏览

python - 用 numpy 读取大数组给出零

我有一个以 4 字节实数编写的大型二进制文件(~4GB)。我正在尝试使用 numpy fromfile 读取此文件,如下所示。

data = np.fromfile(filename, dtype=np.single)

在检查数据时,我看到所有元素都是零。但是,当我在 Matlab 中读取文件时,我可以看到该文件包含正确的数据而不是零。我测试了一个较小的文件(~2.5GB),numpy 可以很好地读取。

我终于尝试使用 np.memmap 来读取大文件(~4GB),如

data = np.memmap(filename, dtype=np.single, mode='r')

在检查数据后,我可以看到它正确读取了数据。

我的问题是为什么 np.fromfile 在数组中给我全零。np.fromfile 可以读取的内容是否有内存限制?

0 投票
1 回答
76 浏览

python - Numpy memmap 第一行随机

我正在测试np.memmap,因为我需要将它用于大型数据文件。我在 Windows 机器上运行 python 3.7。我的测试示例非常简单。

输出显示前 32 个不等于 1。

我错过了什么?

0 投票
1 回答
71 浏览

numpy - 对 numpy memmap 数组进行排序时出现内存错误

我有一个S大小为 12 GB 的 numpy-memmap 矩阵。我正在尝试对每一行进行 argsort 。为此,我定义了另一个 memmap 数组first_k来保存结果。问题是发生内存错误。

这是代码:

任何可能的解决方案?我正在考虑分片处理它......

提前致谢

0 投票
0 回答
86 浏览

python - 如何在 linux 上使用 joblib 创建共享内存对象?

我正在学习joblib共享内存教程。似乎numpy.memmap将数据转储到磁盘,这是不幸的。但是,使用ramfs理论上应该可以在 linux 机器上的 joblib 进程之间共享内存。

是否有方便的管道:

  1. 创建一个足够大的 ramfs 文件系统以容纳特定的形状/dtype ndarray
  2. memmap那个 ndarray 到那个 ramfs
  3. 允许我用它做我想做的事
  4. 清理memmap
  5. 清理 ramfs

我可以调用一堆subprocess.call(["mount",...])类型的东西,但这似乎过于复杂。有没有更好的方法来做这件事?

0 投票
1 回答
98 浏览

python - 为大型密集方形矩阵的列表切片分配值(Python)

我正在处理尺寸NxN ~(100k x 100k)太大而无法放入内存的大型密集方形矩阵。

在做了一些研究之后,我发现大多数人使用 numpy 的memappytables包来处理大型矩阵。但是,我发现这些软件包似乎有很大的局限性。它们似乎都不提供支持 ASSIGN 值来沿多个维度列出磁盘上矩阵的切片。

我想寻找一种有效的方法来将值分配给一个大的密集方阵M,例如:

M[0, [1,2,3], [8,15,30]] = np.zeros((3, 3)) # or

M[0, [1,2,3,1,2,3,1,2,3], [8,8,8,15,15,15,30,30,30]] = 0 # for memmap

  • 使用memmap,表达式M[0, [1,2,3], [8,15,30]]将始终将切片复制到 RAM 中,因此分配似乎不起作用。
  • 使用pytables,不支持沿超过 1 个维度的列表切片。目前我只是沿着一个维度切片,然后是另一个维度(即M[0, [1,2,3]][:, [8,15,30]])。此解决方案的 RAM 使用量将随 N 扩展,这比处理整个数组 (N^2) 更好,但仍然不理想。

  • 此外,pytables似乎不是处理具有大量行的矩阵的最有效方法。(或者是否有一种方法可以指定块大小以消除此消息?)我收到以下警告消息:

我只是想知道是否有更好的解决方案来为任意二维大矩阵切片赋值?

0 投票
1 回答
1480 浏览

python - Numpy 从谷歌云存储加载内存映射数组(mmap_mode)

我想将.npy从 google 存储(gs://project/file.npy)加载到我的 google ml-job 中作为训练数据。由于文件是 +10GB 大,我想使用numpy.load()的mmap_mode选项来避免内存不足。

背景:我将 Keras 与 fit_generator 和 Keras Sequence 一起使用,从存储在 google 存储中的 .npy 加载批量数据。

要访问谷歌存储,我使用的是 BytesIO,因为不是每个库都可以访问谷歌存储。此代码在没有 mmap_mode = 'r' 的情况下工作正常:

如果我激活 mmap_mode,我会收到以下错误:

TypeError:预期的 str、字节或 os.PathLike 对象,而不是 BytesIO

我不明白为什么它现在不再接受 BytesIO。

包含 mmap_mode 的代码:

痕迹:

文件“[...]/numpy/lib/npyio.py”,第 444 行,加载返回 format.open_memmap(file, mode=mmap_mode) 文件“[...]/numpy/lib/format.py”,第 829 行,在 open_memmap fp = open(os_fspath(filename), 'rb') File "[...]/numpy/compat/py3k.py",第 237 行,在 os_fspath "not" + path_type 中。name ) TypeError: 预期的 str、bytes 或 os.PathLike 对象,而不是 BytesIO