【发布时间】: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