OUT_DIR = '/media/sf_3dAnalysis/simMatrix/'
SIM_FILE = 'similarity.npy'
data = np.lib.format.open_memmap(OUT_DIR+SIM_FILE, mode='w+', dtype='float32', shape=(len(filelist),len(filelist)))
del data
运行此代码时出现以下错误消息...
mmap.error: [Errno 22] Invalid argument
。我真的不明白我做错了什么。我在Linux VM中运行它,如果这是相关的。另外,特别好奇的是矩阵是在代码运行后创建的,但它仍然会崩溃,说参数是无效的,因为当它说参数无效时为什么会创建矩阵是没有意义的。
我需要做些什么特别的事情才能让内存映射在Linux机器上运行而不是windows和mac?因为它在我的Mac和Windows机器上工作正常。我想我应该更多地说明,是否需要在虚拟机中设置某些设置或某些东西以使内存映射有效?因为我在正常运行Linux的计算机上试过它,并且它有效。
答案 0 :(得分:1)
我无法使用上面给出的示例复制您的错误。
mmap.error: [Errno 22] Invalid argument
是对libc mmap
例程的低级调用的错误代码,请参阅http://www.gnu.org/software/libc/manual/html_node/Memory_002dmapped-I_002fO.html
mmap返回新映射的地址,或者返回-1表示错误。
可能的错误包括:
EINVAL任何一个地址都无法使用,或者给出了不一致的标记。
我猜这是内存不足的情况,因为你试图分配一个太大的块,不适合VM虚拟内存空间。
答案 1 :(得分:1)
所以我解决了我的问题。我在虚拟机上创建了矩阵的本地副本。然后我将该副本移动到共享文件夹。以下是说明该内容的代码。
#create local copy
data = np.memmap(SIM_FILE, dtype='float32', mode='w+',
shape=(len(filelist),len(filelist)))
#move local copy to shared folder
os.system('mv' + " ~/Desktop/" + SIM_FILE + " " + OUT_DIR )