2015-10-27 1 views
0

J'ai une matrice aléatoire 512x512 dont je veux mettre des éléments sur la diagonale principale d'une autre matrice dont les éléments sont tous nuls pour que ma matrice diagonale soit 262144x262144.Bien sûr cela me donne peu de mémoire error.I a également essayé la fonction clairsemée mais elle ne fonctionne pas aussi. Peut-on m'aider avec ceci? voici le code:Créer une matrice diagonale de grande taille

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

Répondre

2

pas un expert sur sparse matrices, mais en regardant le docs, je crois que vous pouvez faire quelque chose comme ça -

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

run Exemple -

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

C'est exactement comme ça que vous le feriez. Les première et seconde entrées sont des vecteurs 1D qui définissent les emplacements de lignes et de colonnes non nuls. La troisième entrée est un autre vecteur qui vous indique ce que chaque valeur serait pour chaque paire de colonnes de lignes. – rayryeng

+1

Merci beaucoup les gars! –