以下是我有的numpy数组。我需要为id ph temp cond
1 7 44 3
2 5 45 5
3 5 12 8
之类的实例创建一个包含Zeors的矩阵。
np.zeroes([1,1])
但是,基于矩阵的大小(如您在上面看到的,newEdges =
array([['0', 'Firm'],
['1', 'Firm'],
['2', 'Firm'],
...,
['binA', 'year2017_bin'],
['binA', 'year2017_bin'],
['binA', 'year2017_bin']],
dtype='<U21')
newEdges.shape
#(63673218, 2)
newEdges.size
#127346436
),如果我运行语法来生成零矩阵,则会得到一个(63673218, 2)
。
他是完整语法:
Memory Error
如何解决此错误?或者,我如何安全地将这个巨大的矩阵转换为稀疏矩阵,以便在下面进行进一步的计算:
print(newEdges)
unique_Bin = np.unique(newEdges[:,0])
n_unique_Bin = len(unique_Bin)
unique_Bin
n_unique_Bin
#3351248
Q = np.zeros([n_unique_Bin,n_unique_Bin])
--------------------------------------------------------------------------
MemoryError Traceback (most recent call last)
<ipython-input-16-581dfaca2eab> in <module>()
----> 1 Q = np.zeros([n_unique_Bin,n_unique_Bin])
MemoryError:
我的内存中还有24GB用于计算。
答案 0 :(得分:0)
仅指出这一点,您正在尝试创建大小为3,351,248 x 3,351,248的数组。这是11,230,863,157,504项! 11.2万亿个条目!您尝试进行打印的事实使我认为您尚未意识到它有多大。我认为如果没有稀疏矩阵,您将无法做到这一点。首先,您可能应该确保需要执行此操作,看看是否还有其他方法。
否则,您可以使用scipy创建稀疏矩阵
import numpy as np
import scipy
Q = scipy.sparse.csr_matrix((n_unique_Bin,n_unique_Bin), dtype = np.int8)
然后从那里去。