创建大尺寸对角矩阵
Creating big size diagonal matrix
我有一个 512x512 随机矩阵,我想将它的元素放在另一个矩阵的主对角线上,该矩阵的元素全为零,这样我的对角矩阵将是 262144x262144.Of 当然它给我低内存 error.I 也尝试了稀疏函数,但它也没有 work.Can 有人帮我解决这个问题吗?
这是代码:
A=randn(512,512);
A=A(:);
Z=sparse(diag(A));
不是 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
我有一个 512x512 随机矩阵,我想将它的元素放在另一个矩阵的主对角线上,该矩阵的元素全为零,这样我的对角矩阵将是 262144x262144.Of 当然它给我低内存 error.I 也尝试了稀疏函数,但它也没有 work.Can 有人帮我解决这个问题吗? 这是代码:
A=randn(512,512);
A=A(:);
Z=sparse(diag(A));
不是 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