簡體   English   中英

創建具有非零列和行的隨機稀疏矩陣

[英]Create a random sparse matrix with non-zero columns and rows

有沒有一種簡單的方法來確保隨機創建的稀疏矩陣在所有行和列中都具有非零元素?

我曾嘗試sprand創建m * n個矩陣

Matrix=sprand(m,n,0.3)

但是有時會發現非零的行或列。

我還嘗試通過將稀疏矢量創建為行並將矩陣逐行添加到矩陣中來創建矩陣。

編輯:我正在尋找rxample的小尺寸矩陣5 * 5矩陣

手動創建索引:

m = 10;
n = 8;
p = 0.3;

r = repmat(randperm(m), 1, n);
c = repmat(randperm(n), 1, m);
row_idx = r(1:ceil(p*m*n));
col_idx = c(1:ceil(p*m*n));
ran_num = rand(1, ceil(p*m*n));

s = sparse(row_idx, col_idx, ran_num, m, n);
full(s)

    0.1842         0         0         0    0.0133         0    0.0620         0
         0         0         0         0    0.2999         0    0.1967         0
         0         0         0    0.1341         0         0         0    0.0934
         0         0    0.4561         0         0         0         0    0.8949
    0.1017    0.0715         0         0         0         0         0         0
    0.0538    0.7363         0         0    0.3321         0         0         0
         0         0    0.5619    0.2973         0    0.4417         0         0
         0         0         0    0.8972         0    0.5972         0         0
         0         0    0.2425         0         0    0.9954         0    0.7455
         0    0.3074         0         0         0         0    0.2126         0

稀疏性測試:

nnz(s)/numel(s)    
ans =    
    0.3000

下面是一個較小的示例。 密度低於0.5,尺寸為5x5,並且所有行和列中的元素都仍然為非零是不可能的。

m = 5;
n = 5;
p = 0.5;

r = repmat(randperm(m), 1, n);
c = repmat(randperm(n), 1, m);
row_idx = r(1:ceil(p*m*n));
col_idx = c(1:ceil(p*m*n));
ran_num = rand(1, ceil(p*m*n));

s = sparse(row_idx, col_idx, ran_num, m, n);
full(s)

ans =

    1.8078         0         0         0         0
         0         0         0    0.7891         0
         0    1.5096         0         0         0
         0         0         0         0    1.0909
         0         0    1.1130         0         0

暫無
暫無

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

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