【发布时间】:2014-10-24 20:49:31
【问题描述】:
我想生成一个矩形矩阵A,其条目在闭区间[0,1],满足以下性质:
(1) size(A) = (200,2000)
(2) rank(A) = 50
(3) nnz(A) = 100000
如果A 中的非零元素会呈指数衰减,或者至少呈多项式衰减(我希望小值多于大值),那将是最好的。
显然(我认为...),最终归一化为[0,1] 并不是这里的主要问题。
我尝试过的方法不起作用:
-
首先使用
A=abs(randn(200,2000))和阈值生成一个随机矩阵th = prctile(A(:),(1-(100000/(200*2000)))*100); A = A.*(A>th);现在
(3)的属性已经满意,我降低了排名[U,S,V] = svd(A); for i=51:200 S(i,i)=0; end A = U*S/V;但是这个矩阵几乎有完整的基数(我失去了属性
(3))。 首先使用
A=rand(200,50)*rand(50,2000)生成具有指定秩的矩阵。现在满足(2)的条件,我像以前一样设置了阈值。直到现在我失去了财产(2),因为矩阵几乎是满秩的。
那么...有没有办法确保同时满足 (2) 和 (3) 两个属性?
附:我希望矩阵中的非零条目以某种随机/非结构方式分布(仅制作 50 个非零列或行不是我的目标......)。
【问题讨论】:
-
我不确定非零模式能有多“随机”。如果您有 200 行,排名为 50,则基本上有 50 种不同的模式,每个模式重复大约 4 次。
-
好吧,这是一个有趣的评论...我可以生成 50 个随机行
r_i与~500非零条目,并为矩阵的每一行随机选择i。这不是我的目标,但总比没有好。