在Python中使用numpy错误

bhmjp9jg  于 2023-05-17  发布在  Python
关注(0)|答案(3)|浏览(118)
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

所以我在运行这段代码时得到以下错误消息...我真的不知道我做错了什么。我在Linux虚拟机上运行这个,如果这是相关的。另外,特别奇怪的是,矩阵是在代码运行后创建的,但它仍然崩溃,说参数无效,这对于为什么它在说参数无效时创建矩阵没有意义。
在linux和windows以及mac上,我需要做什么特殊的事情来让内存Map工作?因为它在我的Mac和Windows机器上工作得很好。我想我应该更详细地说明,是否需要在虚拟机中设置一些设置或其他内容才能使内存Map正常工作?因为我在一台正常运行Linux的电脑上试过了,它工作正常。

fhg3lkii

fhg3lkii1#

我无法复制你的错误与上面给出的例子。
mmap.error: [Errno 22] Invalid argument是来自对libc mmap例程的低级调用的错误代码请参见http://www.gnu.org/software/libc/manual/html_node/Memory_002dmapped-I_002fO.html
mmap返回新Map的地址,如果出现错误,则返回-1。
可能的错误包括:
EINVAL地址不可用,或给出的标志不一致。
我猜这是一个内存不足的情况,因为你试图分配一个太大的块,这不适合VM虚拟内存空间。

wmtdaxz3

wmtdaxz32#

所以我解决了我的问题,伙计们。我在虚拟机上创建了矩阵的本地副本。然后,我将该副本移动到共享文件夹。下面的代码说明了这一点。

#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 )
zpjtge22

zpjtge223#

在我的例子中,当我试图在mode='w+'下再次访问memmap时,当它在python示例中仍然打开时,我得到了同样的错误。只有重置内核才有帮助

相关问题