我有这个代码,
size_of_similarity_M =80000
similarity_M = numpy.empty((size_of_similarity_M,size_of_similarity_M))
我收到此错误:
Traceback (most recent call last):
File "<ipython-input-1337-7f9234015aae>", line 1, in <module>
runfile('C:/Users/cp1/PythonScript/Try_replace_function.py', wdir='C:/Users/cp1/PythonScript')
File "C:\Users\cp1\AppData\Local\Continuum\Anaconda3\lib\site-packages\spyder\utils\site\sitecustomize.py", line 866, in runfile
execfile(filename, namespace)
File "C:\Users\cp1\AppData\Local\Continuum\Anaconda3\lib\site-packages\spyder\utils\site\sitecustomize.py", line 102, in execfile
exec(compile(f.read(), filename, 'exec'), namespace)
File "C:/Users/cp1/PythonScript/Try_replace_function.py", line 14, in <module>
similarity_M = numpy.empty((size_of_similarity_M,size_of_similarity_M))
MemoryError
如何在不更新所有脚本的情况下轻松解决此问题?当然,对于 size_of_similarity_M
中的较小数字,它效果很好。
我不会更改 similarity_M
的格式,因为我在其他脚本中使用此矩阵的输出。
最佳答案
numpy.arrays 应该存在于内存中。如果您想使用大于 RAM 的矩阵,则必须解决这个问题。您至少可以遵循两种方法:
- 尝试使用矩阵所具有的任何特殊结构的更有效的矩阵表示形式。例如,正如其他人已经指出的那样,稀疏矩阵(有很多零的矩阵)有有效的数据结构,例如 scipy.sparse.csc_matrix .
- 修改您的算法以处理子矩阵。您只能从磁盘读取当前正在计算中使用的矩阵 block 。设计用于在集群上运行的算法通常按 block 工作,因为数据分散在不同的计算机上,并且仅在需要时才传递。
关于使用 numpy.empty 时出现 Python MemoryError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42072483/