Python 中 Matlab sprand() 的等价性?
The equivalence of Matlab sprand() in Python?
我正在尝试将 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)
好像可行,但我不是很确定。有什么意见或建议吗?
对于稀疏数组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
功能有用。
我正在尝试将 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)
好像可行,但我不是很确定。有什么意见或建议吗?
对于稀疏数组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
功能有用。