是否可以创建一个.npy文件而无需先在内存中分配相应的数组?
我需要创建和使用大型numpy数组,而该数组太大而无法在内存中创建。Numpy支持内存映射,但据我所知,我的选择是:
使用numpy.memmap创建一个映射文件。这将直接在磁盘上创建文件而不分配内存,但是不存储元数据,因此当我稍后重新映射文件时,我需要知道其dtype,shape等。在下面,请注意未指定形状结果在内存映射中被解释为平面数组:
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])
在内存中创建一个数组,使用numpy.save保存,然后可以以映射模式加载它。这会将元数据与阵列数据一起记录在磁盘上,但是要求为整个阵列至少分配一次内存。
我有同样的问题,当我阅读Sven的答复时感到失望。如果您无法在文件上拥有大量数组并且一次只处理其中的小块,似乎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创建一个虚拟磁盘。我希望能够以跨平台的方式执行此操作,因此它可以在Windows XP至7,Mac和Linux上运行。我希望能够像普通驱动器一样对ramdisk进行读/写操作,最好使用驱动器号/路径。 我想要这样做的原因是为创建具有特定结构的目录的脚本编写测试。我想在ramdisk中完全创建目录,以便确保测试结束后将其完全删除。我考虑使用Python的,但是如果测试将
我正在Windows服务器上使用C#处理存储在IIS服务器上的web应用程序。 null
这里我有一个判决, 我想做的是将字典保存到一个json文件中。 我现在做的是将dict1保存到一个真正的json文件中,并使用flask send_from_directory返回该文件。如何避免将dict1保存到磁盘?
问题内容: 我无法使用Android API示例中显示的标准InputStreamReader方法在文本文件中读取和写入扩展字符(例如,法语重音字符)。当我使用以下方法读回文件时: 读取的字符串在扩展字符处而不是在行尾处被截断。然后,字符串的后一半进入下一行。我以为我需要将数据持久化为UTF-8,但是我找不到任何示例,而且我是Java的新手。 谁能为我提供示例或相关文档的链接? 问题答案: 非常简
我有这个python代码: 我得到了一条错误消息:pymongo.errors。OperationFailure:超出$group的内存限制,但不允许外部排序。传递allowDiskUse:true以选择加入。 我如何使用allowDiskUse: true?
问题内容: 我真的不确定如何以其他方式提出这个问题,但是我试图在图像上加载文本-这本身似乎是一个棘手的任务,但是我已经使用本教程进行了学习。不幸的是,该教程有点过时了,我无法找到一种方法来动态更改移动设备的字体大小和跨度,并且仍然将文本保持在图像顶部的正确位置。 调整窗口大小时,文本和框的大小无法正确调整(在图像外部溢出)。 我尝试过百分比调整以及其他技术,但运气不佳。下面显示了我用来在背景上显示