2015-10-27 3 views
0

У меня есть 512x512 случайная матрица, которую я хочу поместить на нее элементы на главной диагонали другой матрицы, все элементы которой равны нулю, так что моя диагональная матрица будет 262144x262144. Конечно, это дает мне небольшую память error.I также попробовал разреженную функцию, но она также не работает. Может кто-нибудь мне помочь с этим? вот код:Создание диагональной матрицы большого размера

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

ответ

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 
+1

Это именно то, как вы это сделаете. Первый и второй входы представляют собой 1D-векторы, которые определяют расположение строк и столбцов, отличных от нуля. Третий вход - это другой вектор, который сообщает вам, каково каждое значение для каждой пары столбцов строки. – rayryeng

+1

Огромное спасибо, ребята! –

Смежные вопросы