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

python - 使用 Numpy Memmap 读取某些行或列

我只是想问是否可以将 numpy 数组存储为 .npy 文件,然后使用 memmap 在某些行/列中查看它?

0 投票
1 回答
137 浏览

python - Numpy Memmap Ctypes 访问

我正在尝试使用 numpy memmap 使用一个非常大的 numpy 数组,将每个元素作为 ctypes 结构访问。

它似乎工作正常,但我在 python.exe 停止的 64 位 Windows 机器上遇到了错误。在事件查看器中,我看到错误模块名称是_ctypes.pyd,异常代码是 0xc0000005,我认为这是一个访问异常。

我在 Linux 上似乎没有遇到同样的错误,尽管我的测试并不彻底。

我的问题是:

  1. 我的访问权限是否正确;IE。我使用numpy.memmap.ctypes.data_as正确吗?

  2. __str__我定义了函数 (和__eq__)的事实会My_Structure改变它的大小吗?IE。它仍然可以在数组中用作uint32吗?

  3. 您认为有什么可能会导致这种行为吗?特别考虑到 Windows 和 Linux 之间的差异?

编辑:

  1. 在 big_array 元素上使用ctypes.addressofand ctypes.sizeof,看起来__str__and__eq__不会影响My_Structure

  2. 我在访问之前添加了一些断言big_array,发现我正在尝试访问big_array[-1],这解释了访问错误和崩溃。

这让问题 1 悬而未决:看起来我的代码在技术上是正确的,但我想知道是否有比使用 ctypes.pointer 更好的方法来访问 numpy 数组,这样我仍然可以获得使用 numpy 数组的好处(越界访问警告、负索引换行等)。下面的 Daniel 建议使用结构化的 numpy 数组,但是可以用它来进行位域访问吗?

0 投票
1 回答
1048 浏览

python - 编辑使用 memmap 导入的现有 .npy 文件

我是使用 numpy.core.memmap 对象的新手,并且无法弄清楚如何使用 numpy.memmap() 编辑现有的 .npy 文件读入 python。例如,按照 Scipy.org 的示例,我可以创建一个对象并写入它,但是一旦创建,我就无法修改其内容。

这只是从内存中删除对象,但不会修改文件名处的对象。我也尝试过 numpy.memmap.flush(fpc)​​ ,但这似乎也不起作用。

我从阅读其他帖子中了解到,可以简​​单地将编辑后的 ​​.npy 文件复制到另一个位置,但这似乎在磁盘空间方面可能会出现问题。您不能修改现有的 .npy 文件是否正确?

0 投票
0 回答
434 浏览

python - Numpy Memmap WinError8

在使用该站点的丰富经验 6 年后,我的第一条 StackOverflow 消息。感谢大家为我和其他人提供的所有巨大帮助。

然而,这个问题让我完全困惑,我想向社区寻求帮助。

我有一个 175,759,360 字节的大原始字节“F”有序文件,我需要将其读入内存以使用 python/numpy 进行分析。目标是获得 np.uint16 dtypes 的 (613, 640, 224) numpy 数组。

我已经在类似的情况下多次成功,但在上一个项目中我遇到了一个我无法解决的问题。

我以前能够通过两种方式取得成功(np.memmap)

或使用普通的 np.fromfile

使用 np.memmap 的解决方案现在返回 WinError8 错误

并且使用 fromfile 的解决方案返回引用计数错误

我想寻求解决此问题的任何帮助。内存量应该不是问题,因为我已经在 8GB 和 32GB 内存机器上尝试过代码。我正在使用带有 Python 3.6.4 版和 numpy 1.14.2 版的 Win 10

先感谢您。

0 投票
1 回答
1764 浏览

python - 使用 numpy 内存映射的 64 位系统中文件的最大大小是多少

我正在尝试使用大约 50 GB 的大文件。我正在尝试使用 numpy 内存映射访问文件。我看到用于内存映射的文件大小有一个限制,对于 32 位系统,它是 2GB。这是链接:https ://docs.scipy.org/doc/numpy-1.13.0/reference/generated/numpy.memmap.html

我想知道使用 numpy 内存映射以获得良好性能是否对文件大小有硬性限制。

0 投票
1 回答
1129 浏览

python - numpy 内存映射上随机切片的效率

我有一个 20GB、100k x 100k 'float16' 2D 数组作为数据文件。我将它加载到内存中,如下所示:

然后我尝试从中读取切片。我需要采取的垂直切片实际上是随机的,但性能很差,或者我做错了什么?


分析:

我对比了其他形式的横截面切片,虽然不知道为什么会这样,但效果要好得多:

即使是这些 timeit 函数也不能准确地捕捉到性能下降,因为:

和....相比:

0 投票
2 回答
329 浏览

numpy-memmap - 可以推迟对 numpy.memmap 的操作吗?

考虑这个例子:

哪个输出

因此,这似乎b不再是 amemmap了,我认为这会迫使numpy阅读整体a.npy,从而违背了 memmap 的目的。因此我的问题是,可以将操作memmaps推迟到访问时间吗?

我相信子类化ndarraymemmap可以工作,但对我的 Python 技能没有足够的信心来尝试它。

这是一个显示我的问题的扩展示例:

0 投票
1 回答
205 浏览

python - 在满足条件的非常大的 memmap 中获取下一个元素的索引

我有一个包含电流和电压数据的非常大(10-100 GB)文件的内存映射。从给定的起始索引,我想找到电压满足给定条件的下一个点的索引。

在一个相对较小的列表的情况下,我可以使用这样的迭代器来做到这一点:

但是因为我的memmap太大了,无法构建迭代器。有没有办法以 Pythonic 的方式执行此操作,而无需实际将数据加载到内存中?我总是可以采取丑陋的方法来读取数据块并循环遍历它,直到找到我需要的索引,但这似乎不优雅。

0 投票
1 回答
1722 浏览

python - numpy.memmap 在有足够的可用内存时返回不足的内存

在 64 位 Windows 机器上的典型调用期间numpy.memmap(),python 引发以下错误:

不同的 Windows 机器使用不同的文本引发相同的错误:

这是代码摘要:

此时 Python 只使用了 50MB 的内存。内存不足的原因是什么?

0 投票
0 回答
1051 浏览

python - 将非常大的图像处理为 numpy 数组

我正在处理 .svs 格式的大于 8 GB 的图像。使用 openslide,我将它们读取为 1D numpy 数组。现在,为了将它们输入算法,我需要将它们重塑为图像形式,以处理像素位置相关信息。由于图像非常大,使用 PIL 将 numpy 数组转换为

给我一个错误size does not fit in int。我试图通过将dtypefrom更改为uint8来解决此错误,uint64但是,尽管64GB RAM and 3 TB memory我的工作站上有,但我的 python 一直在崩溃。

然后我尝试使用以下方法加载 numpy 数组memmap

现在上面的代码给了我一个.tif格式的图像。但是,我无法处理它。我分析不出来为什么?我发现当我尝试读取该图像并打印其形状时。

AttributeError:“NoneType”对象没有属性“形状”

所以,这种方式对我来说也失败了。然后我尝试以图像的形状(44331、64625、3)重塑numpy数组,但出现以下错误

ValueError:序列太大;不能大于 32

谁能帮我处理这样的图像。我在 x、y、z 像素位置对这些图像进行了注释,并将这些注释作为基本事实处理,我需要将我的 numpy 数组转换为图像的形式。

任何帮助都会很棒。

编辑:我现在正在重塑 numpy 数组。但是,仍然不知道如何使用 numpy 文件作为我的数据集输入而不是图像。