numpy.random_multivariate_normal的scipy.sparse

时间:2019-04-03 19:38:13

标签: python numpy scipy

我想节省一点内存,并以为我会创建一个scipy.sparse身份矩阵(dim有成千上万,并不可怕,但也不省钱)。请注意,其形状通过了assert

cov = sigma_0 * sparse.identity(dim, dtype=np.float32)
assert (dim, dim) == cov.shape
result = np.random.multivariate_normal(mu, cov)
E   ValueError: cov must be 2 dimensional and square

但是,以下方法工作正常:

cov = sigma_0 * np.identity(dim, dtype=np.float32)
assert (dim, dim) == cov.shape
result = np.random.multivariate_normal(mu, cov)

我是否在文档的某处错过了它,说稀疏协方差矩阵会因ValueError而失败?

1 个答案:

答案 0 :(得分:3)

这里发生的是在np.random.multivariate_normal中,输入数组被强制转换为数组:

cov = np.array(cov)

由于numpy对稀疏矩阵一无所知,最终创建了一个dtype object的标量数组。

In [3]: cov = sparse.identity(100, dtype=np.float32)

In [4]: cov.shape
Out[4]: (100, 100)

In [5]: np.array(cov)
Out[5]: 
array(<100x100 sparse matrix of type '<type 'numpy.float32'>'
        with 100 stored elements (1 diagonals) in DIAgonal format>, dtype=object)