簡體   English   中英

Matlab的等價性在Python中使用了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函數有用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM