gpt4 book ai didi

matlab - 生成具有特定秩和基数的随机矩阵

转载 作者:太空宇宙 更新时间:2023-11-03 20:08:34 25 4
gpt4 key购买 nike

我想生成一个矩形矩阵 A,其元素位于闭区间 [0,1] 中,它满足以下属性:

(1) size(A) = (200,2000)
(2) rank(A) = 50
(3) nnz(A) = 100000

最好是 A 中的非零元素呈指数衰减,或者至少呈多项式衰减(我希望小值明显多于大值)。显然(我认为...),最终归一化为 [0,1] 并不是这里的主要问题。

我试过但没有用的东西:

  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))。

  2. 首先使用 A=rand(200,50)*rand(50,2000) 生成具有指定秩的矩阵。现在条件 (2) 已满足,我像以前一样进行阈值处理。只是现在我丢失了属性 (2),因为矩阵几乎满秩了。

那么...有没有办法确保属性 (2)(3) 同时满足?

附言我希望矩阵中的非零条目以某种随机/非结构化方式分布(仅仅制作 50 个非零列或行不是我的目标...)。

最佳答案

这满足所有条件,概率非常高:

A = zeros(200,2000);
A(:,1:500) = repmat(rand(200,50),1,10);

然后,如果需要,您可以对非零列进行混洗:

A = A(:,randperm(size(A,2)));

矩阵具有垂直结构:在 500 列中所有元素都非零,而在其余 1500 列中所有元素都为零。 (不确定这是否适合您的目的)。

关于matlab - 生成具有特定秩和基数的随机矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25592032/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com