我无法删除文件创建numpy.memmap功能
class MyClass
def __init__(self):
self.fp = np.memmap(filename, dtype='float32', mode='w+', shape=flushed_chunk_shape)
...
def __del__(self):
del self.fp
os.remove(filename)
Run Code Online (Sandbox Code Playgroud)
当我运行del myclass(MyClass 的实例)时,出现错误WindowsError: [Error 32] The process cannot access the file。如果我以非面向对象的方式使用memmap和删除文件,一切正常。所以我认为析构函数有麻烦。但为什么会发生这种情况呢?
在 64 位 Windows 机器上的典型调用过程中numpy.memmap(),python 会引发以下错误:
OSError: [WinError 8] Not enough memory resources are available to process this command
Run Code Online (Sandbox Code Playgroud)
不同的 Windows 机器会用不同的文本引发相同的错误:
OSError: [WinError 8] Not enough storage is available to process this command.
Run Code Online (Sandbox Code Playgroud)
这是代码摘要:
with open(infile, 'rb') as f:
......
array = numpy.memmap(f, dtype='uint8', mode='r', offset=offset, shape=arraysize).tolist()
Run Code Online (Sandbox Code Playgroud)
此时Python仅使用了50MB的内存。内存不足的原因是什么?
我正在尝试处理一个大约 50 GB 的大文件。我正在尝试使用 numpy 内存映射访问该文件。我看到用于内存映射的文件大小有限制,32 位系统为 2GB。这是链接:https : //docs.scipy.org/doc/numpy-1.13.0/reference/generated/numpy.memmap.html
我想知道使用 numpy 内存映射对文件大小是否有硬限制以获得良好的性能。
python numpy memory-mapped-files memory-mapping numpy-memmap
我有一个 20GB、100k x 100k 'float16' 2D 数组作为数据文件。我将其加载到内存中,如下所示:
\n\nfp_read = np.memmap(filename, dtype='float16', mode='r', shape=(100000, 100000))\nRun Code Online (Sandbox Code Playgroud)\n\n然后我尝试从中读取切片。我需要采取的垂直切片实际上是随机的,但性能非常差,或者我做错了什么?
\n\n分析:
\n\n我与其他形式的横截面切片进行了比较,尽管我不知道为什么应该这样,但它要好得多:
\n\n%timeit fp_read[:,17000:17005] # slice 5 consecutive cols\n1.64 \xc2\xb5s \xc2\xb1 16.4 ns per loop (mean \xc2\xb1 std. dev. of 7 runs, 1000000 loops each)\n\n%timeit fp_read[:,11000:11050:10]\n1.67 \xc2\xb5s \xc2\xb1 21 ns per loop (mean \xc2\xb1 std. dev. of 7 runs, 1000000 loops each)\n\n%timeit fp_read[:,5000:6000:200]\n1.66 \xc2\xb5s \xc2\xb1 27.3 ns per loop (mean \xc2\xb1 std. dev. of 7 runs, 1000000 loops each)\n\n%timeit …Run Code Online (Sandbox Code Playgroud) 我在内存中生成一些数据,我想将其转换为 numpy.memmap 以节省 RAM。我应该怎么办?我的数据位于:
X_list_total_standardized=np.array(X_list_total_standardized)
Run Code Online (Sandbox Code Playgroud)
我知道我可以初始化一个空的 numpy.memmap:
X_list_total_standardized_memmap=np.memmap(self._prepared_data_location_npmemmap_X,dtype='float32',mode='w+')
Run Code Online (Sandbox Code Playgroud)
将 X_list_total_standardized 存储到内存映射中最方便的方法是什么?谢谢
PS:下面的命令可以吗?
X_list_total_standardized_memmap[:]=X_list_total_standardized[:]
Run Code Online (Sandbox Code Playgroud)