gpt4 book ai didi

python - 如何在磁盘上创建一个 numpy .npy 文件?

转载 作者:太空狗 更新时间:2023-10-29 17:45:37 33 4
gpt4 key购买 nike

是否可以在不先在内存中分配相应数组的情况下创建 .npy 文件?

我需要创建和使用一个大型 numpy 数组,该数组太大而无法在内存中创建。 Numpy 支持内存映射,但据我所知,我的选择是:

  1. 使用 numpy.memmap 创建一个内存映射文件。这直接在磁盘上创建文件而不分配内存,但不存储元数据,所以当我稍后重新映射文​​件时我需要知道它的数据类型、形状等。在下面,请注意没有指定形状结果在 memmap 中被解释为平面数组:

    In [77]: x=memmap('/tmp/x', int, 'w+', shape=(3,3))


    In [78]: x
    Out[78]:
    memmap([[0, 0, 0],
    [0, 0, 0],
    [0, 0, 0]])


    In [79]: y=memmap('/tmp/x', int, 'r')


    In [80]: y
    Out[80]: memmap([0, 0, 0, 0, 0, 0, 0, 0, 0])
  2. 在内存中创建一个数组,使用 numpy.save 保存它,之后它可以在内存映射模式下加载。这会将元数据与阵列数据一起记录在磁盘上,但要求至少为整个阵列分配一次内存。

最佳答案

我有同样的问题,当我看到斯文的回复时感到很失望。如果你不能在文件上有一个巨大的数组并且一次处理它的一小部分,那么 numpy 似乎会错过一些关键功能。您的案例似乎接近制作 .npy 格式的原始合理性中的一个用例(请参阅:http://svn.scipy.org/svn/numpy/trunk/doc/neps/npy-format.txt)。

然后我遇到了 numpy.lib.format,这似乎是非常有用的好东西。我不知道为什么这个功能不能从 numpy 根包中获得。与 HDF5 相比的主要优势在于它附带了 numpy。

>>> print numpy.lib.format.open_memmap.__doc__

"""
Open a .npy file as a memory-mapped array.

This may be used to read an existing file or create a new one.

Parameters
----------
filename : str
The name of the file on disk. This may not be a filelike object.
mode : str, optional
The mode to open the file with. In addition to the standard file modes,
'c' is also accepted to mean "copy on write". See `numpy.memmap` for
the available mode strings.
dtype : dtype, optional
The data type of the array if we are creating a new file in "write"
mode.
shape : tuple of int, optional
The shape of the array if we are creating a new file in "write"
mode.
fortran_order : bool, optional
Whether the array should be Fortran-contiguous (True) or
C-contiguous (False) if we are creating a new file in "write" mode.
version : tuple of int (major, minor)
If the mode is a "write" mode, then this is the version of the file
format used to create the file.

Returns
-------
marray : numpy.memmap
The memory-mapped array.

Raises
------
ValueError
If the data or the mode is invalid.
IOError
If the file is not found or cannot be opened correctly.

See Also
--------
numpy.memmap
"""

关于python - 如何在磁盘上创建一个 numpy .npy 文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4335289/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com