2017-07-19 70 views
4

我寫了一個函數,生成一個尺寸爲nxd
的稀疏矩陣,並在每列中放入2個非零值。生成一個具有N個非零元素的隨機稀疏矩陣

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,我需要從矩陣大小中選擇非零條目的數量。給出一個密度基本上可以依賴於矩陣的大小。

我對如何挑選索引和填充它們有點困惑......我用一個非常昂貴的循環來做這件事,並希望得到幫助。

編輯:
一切都必須稀疏。如果我不以稀疏的方式完成,足夠大的矩陣會在內存中崩潰。

回答

3

你好像很接近!

您可以選取num_nnz隨機(唯一)1與矩陣元素數量之間的整數,然後將值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 
+0

似乎它做的工作。謝謝先生。 –

相關問題