大型Numpy数组处理程序,Numpy数据处理,memmap函数映射

2024-05-14 15:10:13 发布

您现在位置:Python中文网/ 问答频道 /正文

具有nyp文件和memmap功能的大型numpy阵列(超过4GB)

我在使用numpy包进行数组计算,在这里我读到https://docs.scipy.org/doc/numpy/neps/npy-format.html

在“格式规范:版本2.0”中,它说对于.npy文件,“版本2.0格式将头大小扩展到4gib”。在

我的问题是:

  1. 标题大小是多少?那是不是意味着我只能存钱数字阵列最大4GB阵列的大小?一个数组能有多大?在

我还读了https://docs.scipy.org/doc/numpy-1.14.0/reference/generated/numpy.memmap.html 其中规定“在32位系统上,内存映射文件不能大于2GB”

  1. 是不是意思numpy.memmap的限制是基于系统的内存?有没有办法避免这种限制?

  2. 此外,我读到我们可以选择数组的数据类型,其中最好的分辨率是“complex128”。有没有办法在64位计算机上更精确地“使用”和“保存”元素?(比complex128或float64更精确)


Tags: 文件内存httpsorg版本numpydocsdoc
1条回答
网友
1楼 · 发布于 2024-05-14 15:10:13

前面的头大小字段是16位宽,允许头小于64KiB。因为报头描述了数据的结构,而不包含数据本身,所以对大多数人来说这不是一个大问题。引用注释,“具有大量列的结构化数组可能会超过这个值。”因此为了回答第一个问题,头大小小于64KiB,但数据在后面,所以这不是数组大小限制。格式未指定数据大小限制。在

内存映射容量取决于操作系统和机器体系结构。现在,我们已经基本上转向了平面但通常是虚拟地址映射,因此程序本身、堆栈、堆和映射文件都在争夺相同的空间,总共有4GiB的32位指针。操作系统经常将其划分为相当大的块,因此有些系统可能只允许2GiB的用户空间,而其他系统可能只允许3GiB;而且通常您可以映射比其他分配更多的内存。memmap限制与所使用的操作系统比物理内存更紧密地联系在一起。在

非平面地址空间,例如在OS/2上使用不同的段,可以允许更大的使用量。代价是指针不再是一个单词。例如,PAE为操作系统提供了一种使用更多内存的方法,但仍然给进程留下了自己的32位限制。一般来说,现在使用64位系统更容易,允许最多16 EB的内存空间。因为数据的大小已经增长了很多,所以我们也处理更大的数据块,比如4MiB或16MiB分配,而不是传统的4KiB页面或512B扇区。物理内存通常有更实际的限制。在

是的,有些元素的精度高于64位浮点;尤其是64位整数。通过牺牲所有的指数,有效地使用了更大的尾数。Complex128是两个64位浮点,精度不高,但有第二个维度。有一些类型可以任意精确地增长,比如Python的长整数(Python 2中为long,python3为int)和分数,但numpy通常不会深入研究这些类型,因为它们也有匹配的存储和计算成本。数组的一个基本特性是,由于元素大小是一致的,因此可以使用索引计算来处理它们。在

相关问题 更多 >

    热门问题