【问题标题】:The equivalence of Matlab sprand() in Python?Python中Matlab sprand()的等价物?
【发布时间】:2015-07-17 15:34:46
【问题描述】:

我正在尝试将 Matlab 代码 sn-p 转换为 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)

它似乎有效,但我对此不太确定。有什么意见或建议吗?

【问题讨论】:

  • 我很确定这些是不同的。 sprand(S) 给出了与 S 具有相同稀疏结构的均匀分布的随机数。scipy.sparse.rand(a,b,density=density) 的随机数具有密度的密度,相当于sprand(a,b,density)
  • @cge 是的,我知道,所以这是我能做的最好的模仿 sprand() 的事情。所以我还在寻找更好的方法来实现sprand(S)

标签: python matlab random


【解决方案1】:

对于稀疏数组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 函数有用。

【讨论】:

    猜你喜欢
    • 2021-11-02
    • 2016-09-18
    • 2018-05-29
    • 2020-02-13
    • 1970-01-01
    • 1970-01-01
    • 2021-03-13
    • 2019-11-30
    • 2017-11-17
    相关资源
    最近更新 更多