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

python - 就地调整 numpy.memmap 的大小

调整大小的代码numpy.memmap似乎有效,但程序所做的更改不会保存。

同样,当我尝试调整大小程序时,它会在线粉碎 python 解释器

下面的代码:


更新: 我试过.flush()

但我不明白为什么我不能有w+模式?

IOError:[Errno 22] 无效模式('w+b')或文件名:'A_r.npy'


更新:

好的,我明白了。w+用于创作和r+读写。

0 投票
2 回答
558 浏览

python - 在带有上下文管理器的 python 中打开 np.memmap() 二进制文件

我有一个非常奇怪的问题,我无法从我的一个较大的脚本中打开文件。

这个问题是间歇性的,我似乎无法理解错误。我收到此错误:

从我的脚本中的这个命令:

当我使用:

它评估为True。此外,当我在其中单独运行open命令时,ipython它会成功打开文件:

我不知所措,认为errno 22错误具有误导性。正如我之前所说,问题是间歇性的,并且适用于某些文件。有谁知道我做错了什么?

我正在使用 64 位 Windows 8 机器并从 Anaconda 2.1.0(64 位)发行版运行 python 版本 2.7.8。

0 投票
1 回答
671 浏览

python - 在 dask 数组中使用 float32 时出现内存错误

我正在尝试使用将 1.25 GB 数据集导入 pythondask.array

该文件是一个 1312*2500*196 的数组uint16。我需要将其转换为float32数组以供以后处理。

我已经设法将这个 Dask 数组拼接在一起uint16,但是当我尝试转换为时float32出现内存错误

不管我对块大小做什么,我都会遇到内存错误。

我通过以 100 行连接数组来创建数组(将 2500 维分解为 100 行的小片段,因为dask无法原生读取.RAW图像文件,我必须使用它numpy.memmap()来读取文件然后创建数组。下面我将提供“尽可能短”的代码片段:

我尝试了两种方法:

1)创建完整的uint16数组,然后尝试转换为float32

(注意:这memmap是一个 1312x100x196 数组,行数范围从 0 到 24)

然后我用

在方法 2 中:

这两种方法都会导致内存错误。

这有什么原因吗?

我读到该dask数组能够进行多达 100 GB 的数据集计算。

我尝试了所有块大小(从小到 10x10x10 到单行)

0 投票
1 回答
105 浏览

python - 在 Oja 规则中使用 memmap 崩溃 RAM

我在大小为 400x156300 的数据集上使用 oja 规则。它似乎使我的 RAM 崩溃。我不确定是什么原因造成的。请帮忙。我有 12 GB 的 RAM。尝试使用 memmap 但仍然崩溃!

此外,提出了问题:https ://github.com/itdxer/neupy/issues/27 。不知道包开发是否活跃。

通过使 RAM 崩溃,我的意思是 RAM % 利用率超过 100%,并且我的计算机停止响应。

0 投票
2 回答
885 浏览

python - 打包布尔数组需要通过 int (numpy 1.8.2)

我正在寻找更紧凑的方式来存储布尔值。numpy 内部需要 8 位来存储一个布尔值,但np.packbits允许打包它们,这很酷。

问题是要在一个4e6 字节数组中打包一个32e6 字节的布尔数组,我们首先需要花费256e6 字节来将布尔数组转换为 int 数组!

在 numpy 跟踪器中打开了一个一年前的问题(参见 https://github.com/numpy/numpy/issues/5377

有人有解决方案/更好的解决方法吗?

当我们尝试以正确的方式进行操作时的回溯:

PS:我会尝试一下 bitarray,但会在纯 numpy 中得到它。

0 投票
1 回答
794 浏览

python - 为什么我会使用 numpy memmap 收到 OverflowError 和 WindowsError 以及如何解决?

关于我在这里的另一个问题,如果我使用我的数据集的一小部分,则此代码有效,由于规则,在这部分之后dtype='int32'使用 a在我的主进程上float64产生一个TypeErrorsafe所以我会坚持使用,int32但尽管如此,我我很好奇,想知道我遇到的错误。

如果我使用完整数据( where shape=(329568, 27519)),使用这些dtypes

使用int32int时出现OverflowError

使用float64时出现WindowsError

为什么以及如何解决这个问题?

编辑:添加回溯

int32的回溯

float64的回溯

编辑:添加了其他信息

其他可能有帮助的信息:我有一个 1TB(931 GB 可用)硬盘,有 2 个分区,驱动器 D22.8GB没有 150GB),我的工作文件包括这个脚本和 memmap 将被写入的位置和驱动器 E406GB空闲781GB)我的洪流内容去哪里了。起初,我尝试将 mmap 文件写入Drive D,它为int32生成了一个1,903,283kb 文件,为float64生成了3,806,566kb文件。我想可能是因为空间不足,这就是我收到这些错误的原因,所以我尝试了Drive E,它应该绰绰有余,但它生成了相同的文件大小并给出了相同的错误。

0 投票
0 回答
794 浏览

python-2.7 - 将 numpy memmap'd 文件连接到单个 memmap

我有大量(> 1000 个)文件,每个大约 20MB,它们代表以简单二进制格式保存的连续时间序列数据,因此如果我直接将它们全部连接起来,我可以恢复我的完整时间序列。

我想在 python 中虚拟地做到这一点,通过使用 memmap 来寻址每个文件,然后将它们全部连接到一个大的 memmap 中。

搜索 SO 表明 np.concatenate 会将它们加载到内存中,这是我做不到的。这里的问题似乎部分回答了它,但那里的答案假设我知道我的文件在连接之前有多大,这不一定是真的。

那么,有没有一种在事先不知道它们有多大的情况下连接 memmap 的通用方法?

编辑:有人指出,链接的问题实际上在磁盘上创建了一个连接文件。这不是我想要的。

0 投票
1 回答
738 浏览

python - 无法释放 numpy 数组消耗的内存

我有一组 .npz 格式的 5 个文件。我需要从这些文件中一一提取numpy数组,然后用它来训练模型。在内存中加载第一个 numpy 数组并用它训练模型后,如果我尝试通过切片将其从内存中删除,消耗的内存并没有减少。因此,我无法加载第二个 numpy 数组并最终得到 MemoryError。

如何确保在训练模型后释放内存?

PS:X_test 和 y_test 的大小非常小,可以忽略。

代码:

输出:

0 投票
1 回答
260 浏览

python - numpy mean 大于 memmap 的最大值

我有一个时间戳数组,矩阵 X 的第二列中的每一行都会增加。我计算时间戳的平均值,它大于最大值。我正在使用 numpy memmap 进行存储。为什么会这样?

编辑:我在这里上传了 memmap 文件。http://www.filedropper.com/x_2这就是我加载它的方式。

0 投票
0 回答
1041 浏览

python - 并行更新 numpy.memmap 文件时,有没有办法只“刷新”一个切片而不是整个文件?

我必须做很多讨厌的 i/o,并且我选择使用带有 numpy 的内存映射文件......在经历了很多头痛之后,我意识到当一个进程“刷新”到磁盘时,它通常会覆盖其他进程正在尝试的内容用旧数据写入...我知道使用 mmap 包您可以只将一个块写入磁盘。我会使用 mmap 但因为我的数据由零和非常小的数字混合组成,所以很难弄清楚它们作为字符串有多少字节以及哪个处理器“拥有”哪个块。

有没有办法执行以下操作:

这样每个处理器都可以同时更新 mmap 而无需将旧零刷新回新数据?