【问题标题】:Create a random sparse matrix with non-zero columns and rows创建具有非零列和行的随机稀疏矩阵
【发布时间】:2016-09-20 04:39:04
【问题描述】:

有没有一种简单的方法可以确保随机创建的稀疏矩阵在所有行和列中都有非零元素?

我已经尝试sprand 创建 m*n 矩阵

Matrix=sprand(m,n,0.3)

但有时会找到非零的行或列。

我还尝试通过将稀疏向量创建为行并在矩阵中逐行添加一行来创建矩阵。

编辑:我正在为 rxample 寻找一个小尺寸的 5*5 矩阵

【问题讨论】:

  • 那么您希望所有行和所有列都至少有一个非零元素吗?密度是否必须恰好是0.3 或者足够接近? IE。可以在可以创建 OK 矩阵的位置插入一些随机数吗?
  • 大概,你的矩阵有多大?
  • 感谢您的 cmets,我需要密度小于 0.5 并且非零元素位置是随机的。矩阵的th大小是5*5左右的小矩阵

标签: matlab matrix sparse-matrix


【解决方案1】:

手动创建索引:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-24
    • 1970-01-01
    • 2012-01-10
    • 2021-06-24
    • 1970-01-01
    相关资源
    最近更新 更多