使用numpy.empty

时间:2017-02-06 16:20:10

标签: python

我有这段代码,

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的格式,因为我在其他脚本中使用了这个矩阵的输出。

1 个答案:

答案 0 :(得分:1)

numpy.arrays意味着生活在记忆中。如果你想使用大于RAM的矩阵,你必须解决这个问题。您可以遵循至少两种方法:

  1. 尝试更有效的矩阵表示,利用矩阵具有的任何特殊结构。例如,正如其他人已经指出的那样,稀疏矩阵(具有大量零的矩阵)有高效的数据结构,如scipy.sparse.csc_matrix
  2. 修改算法以处理子矩阵。您只能从磁盘读取当前正在计算中使用的矩阵块。设计用于在群集上运行的算法通常以块为单位进行工作,因为数据分散在不同的计算机上,并且仅在需要时传递。