创建大尺寸对角矩阵

时间:2015-10-27 20:07:44

标签: matlab matrix out-of-memory diagonal

我有一个512x512随机矩阵,我想把它的元素放在另一个矩阵的主对角线上,这些元素都是零,这样我的对角矩阵就会是262144x262144。当然它给了我低内存错误。我也尝试过稀疏功能,但它也不起作用。任何人都可以帮助我吗? 这是代码:

A=randn(512,512);
A=A(:);
Z=sparse(diag(A));

1 个答案:

答案 0 :(得分:2)

不是sparse矩阵的专家,但是看docs,我相信你可以这样做 -

sparse(1:262144,1:262144,A(:))

示例运行 -

>> A
A =
     1     7     4
     8     7     6
     9     7     2
>> n = 9
n =
     9
>> sparse(1:n,1:n,A(:))
ans =
   (1,1)        1
   (2,2)        8
   (3,3)        9
   (4,4)        7
   (5,5)        7
   (6,6)        7
   (7,7)        4
   (8,8)        6
   (9,9)        2
>> full(sparse(1:n,1:n,A(:)))
ans =
     1     0     0     0     0     0     0     0     0
     0     8     0     0     0     0     0     0     0
     0     0     9     0     0     0     0     0     0
     0     0     0     7     0     0     0     0     0
     0     0     0     0     7     0     0     0     0
     0     0     0     0     0     7     0     0     0
     0     0     0     0     0     0     4     0     0
     0     0     0     0     0     0     0     6     0
     0     0     0     0     0     0     0     0     2