手動でインデックスを作成します。スパース性の
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
このように、すべての行とすべての列に少なくとも1つの非零要素が必要ですか?密度は正確に「0.3」でなければならないのか、それとも何か近くにあるのであれば十分でしょうか?私。 OK行列を作成する場所に乱数を挿入しても問題ありませんか? –
おおよそ、あなたのマトリックスはどれくらいですか? –
あなたのコメントをありがとう、私は密度が0.5未満であり、非ゼロ要素の場所がランダムである必要があります。行列のサイズは5×5程度の小さな行列です – OBtli