python - Python 中 Matlab sprand() 的等价性?

标签 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)

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

最佳答案

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

关于python - Python 中 Matlab sprand() 的等价性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30094682/

相关文章:

Matlab - 将矩阵与 3d 矩阵的每个矩阵相乘

matlab - 在 Matlab 中为 Mandelbrot 集着色

java - 如何生成随机图?

c++ - boost 和 c++11 线程兼容性

c++ - std::random_device 和 std::mt19937 服从均匀分布吗?

python - 如何让机器人在 discord.py 中编辑自己的消息

matlab - 如何在不使用 MATLAB 循环的情况下将矩阵元素与其相邻元素进行比较?

python - 从字典创建 .txt 文件

python - 如何从 Tensorflow 中的字符串张量中随机删除空格

具有连续无界输入的Python ThreadPoolExecutor