问题标签 [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.
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()
很重要,因为我不知道我有多少个迷你阵列。
python - 为什么 numpy.memmap.flush() 不更新 Windows 中的文件?
我目前正在将数据从磁盘复制/重新格式化到 memmapped-numpy 数组中。我每隔约 5000 个元素调用一次 flush(),但 Windows 中的更改日期不会改变。
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
使用字符串中?我觉得我错过了一些简单的东西。
python - 改组大型内存映射的numpy数组
我在一个文件中有一个(20000000, 247)
大小尺寸的数组。我有可用的内存。我需要沿行对数据进行洗牌。我已经在. 但是,如果我尝试就地修改以外的任何操作,例如创建一个 random.sampled 索引数组然后返回,我会得到 MemoryError。我也尝试过改组 in 块,然后尝试堆叠块以构建完整的数组,但是. 到目前为止,我发现的唯一解决方案是加载文件,然后执行. 但是,这需要很长时间(已经 5 个小时了,它仍然被洗牌)。30 GB
.npy
32 GB
mmap_mode
np.random.permutation
p
array[p]
MemoryError
mmap_mode = 'r+'
np.random.shuffle
当前代码:
有没有更快的方法可以在不破坏内存限制的情况下做到这一点?
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 可以读取的内容是否有内存限制?
python - Numpy memmap 第一行随机
我正在测试np.memmap
,因为我需要将它用于大型数据文件。我在 Windows 机器上运行 python 3.7。我的测试示例非常简单。
输出显示前 32 个不等于 1。
我错过了什么?
numpy - 对 numpy memmap 数组进行排序时出现内存错误
我有一个S
大小为 12 GB 的 numpy-memmap 矩阵。我正在尝试对每一行进行 argsort 。为此,我定义了另一个 memmap 数组first_k
来保存结果。问题是发生内存错误。
这是代码:
任何可能的解决方案?我正在考虑分片处理它......
提前致谢
python - 如何在 linux 上使用 joblib 创建共享内存对象?
我正在学习joblib
共享内存教程。似乎numpy.memmap
将数据转储到磁盘,这是不幸的。但是,使用ramfs理论上应该可以在 linux 机器上的 joblib 进程之间共享内存。
是否有方便的管道:
- 创建一个足够大的 ramfs 文件系统以容纳特定的形状/dtype ndarray
memmap
那个 ndarray 到那个 ramfs- 允许我用它做我想做的事
- 清理
memmap
- 清理 ramfs
我可以调用一堆subprocess.call(["mount",...])
类型的东西,但这似乎过于复杂。有没有更好的方法来做这件事?
python - 为大型密集方形矩阵的列表切片分配值(Python)
我正在处理尺寸NxN ~(100k x 100k)
太大而无法放入内存的大型密集方形矩阵。
在做了一些研究之后,我发现大多数人使用 numpy 的memap或pytables包来处理大型矩阵。但是,我发现这些软件包似乎有很大的局限性。它们似乎都不提供支持 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似乎不是处理具有大量行的矩阵的最有效方法。(或者是否有一种方法可以指定块大小以消除此消息?)我收到以下警告消息:
我只是想知道是否有更好的解决方案来为任意二维大矩阵切片赋值?
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