Matlab的等价性在Python中使用了sprand()?

时间:2015-05-07 07:36:20

标签: python matlab random

我正在尝试将Matlab代码段转换为Python代码段。但是,我不太确定如何正确实现sprand()函数。

这是Matlab代码使用sprand()

的方式
% n_z is an integer, n_dw is a matrix
n_p_z_dw = cell(n_z, 1); % n(d,w) * p(z|d,w)
for z = 1:n_z
  n_p_z_dw{z} = sprand(n_dw);

这就是我在Python中实现上述逻辑的方法:

n_p_z_dw = [None]*n_z  # n(d,w) * p(z|d,w)
density = np.count_nonzero(n_dw)/float(n_dw.size)
for i in range(0, n_z):
    n_p_z_dw[i] = scipy.sparse.rand(n_d, n_w, density=density)

它似乎有用,但我对此并不十分肯定。有任何意见或建议吗?

1 个答案:

答案 0 :(得分:4)

对于稀疏数组A:

,以下应该是一种相对快速的方法
import scipy.sparse as sparse
import numpy as np
sparse.coo_matrix((np.random.rand(A.nnz),A.nonzero()),shape=A.shape)

这将构建一个COO格式稀疏矩阵:它使用A.nonzero()作为坐标,A.nnz(A中非零条目的数量)来查找要生成的随机数的数量。

我想知道这是否可能是scipy.sparse.rand函数的有用补充。