【问题标题】:Generate a random sparse matrix with N non-zero-elements生成具有 N 个非零元素的随机稀疏矩阵
【发布时间】:2017-07-19 16:02:27
【问题描述】:

我编写了一个函数,它生成大小为nxd 的稀疏矩阵
并在每列中放入 2 个非零值。

function [M] = generateSparse(n,d)
    M = sparse(d,n);
    sz = size(M);
    nnzs = 2;
    val = ceil(rand(nnzs,n));
    inds = zeros(nnzs,d);
    for i=1:n
        ind = randperm(d,nnzs);
        inds(:,i) = ind;
    end 
    points = (1:n);
    nnzInds = zeros(nnzs,d);
    for i=1:nnzs
        nnzInd = sub2ind(sz, inds(i,:), points);
        nnzInds(i,:) =  nnzInd;
    end
    M(nnzInds) = val;
end

但是,我希望能够给函数另一个参数 num-nnz,这将使它随机选择 num-nnz 个单元格并放在那里 1。

我不能使用sprand,因为它需要密度,并且我需要非零条目的数量与矩阵大小无关。并且给出密度基本上取决于矩阵大小。

我对如何选择索引并填充它们有点困惑......我使用了一个非常昂贵的循环并且希望得到帮助。

编辑:
一切都必须是稀疏的。如果我不以稀疏的方式进行操作,那么足够大的矩阵会在内存中崩溃。

【问题讨论】:

    标签: matlab


    【解决方案1】:

    你看起来很亲密!

    您可以在 1 和矩阵中的元素数之间选择 num_nnz 随机(唯一)整数,然后将值 1 分配给这些元素中的索引。

    要选择随机的唯一整数,请使用randperm。要获取矩阵中的元素数量,请使用numel

    M = sparse(d, n); % create dxn sparse matrix
    num_nnz = 10;     % number of non-zero elements
    idx = randperm(numel(M), num_nnz); % get unique random indices
    M(idx) = 1;       % Assign 1 to those indices
    

    【讨论】:

      猜你喜欢
      • 2018-11-12
      • 1970-01-01
      • 1970-01-01
      • 2019-10-14
      • 1970-01-01
      • 2016-09-20
      • 2015-08-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多