Ce n'est pas en fait une matrice éparse. Une matrice clairsemée dans MATLAB est définie comme telle. Si vous utilisez les fonctions sparse ou spdiags pour définir cette matrice, les éléments zéro n'auront pas besoin d'être stockés, mais uniquement les non-zéros. Bien sûr, MATLAB sait comment travailler avec ces vraies matrices creuses en conjonction avec d'autres doubles matrices standard. Enfin, les vraies matrices éparses sont généralement beaucoup plus clairsemées que celles-ci, ou vous ne vous soucieriez pas d'utiliser la forme de stockage clairsemée.
Peu importe, si vous ne souhaitez que les éléments non nuls de toute matrice, vous pouvez le faire:
NZ = M(M ~= 0);
alternativement,
NZ = M(find(M));
Soit sera chaîne les non-zéros par colonnes, car c'est ainsi que les nombres sont stockés dans une matrice dans MATLAB.
NZ = M(find(M))
NZ =
-0.6
-0.6
1.8
-2.3
3.4
3.4
-3.8
-4.3
Dans votre question, vous avez demandé comment faire en lignes, extraire les éléments non nuls dans la première rangée, puis la deuxième rangée, etc.
Ceci est le plus simplement fait en transposant le tableau en premier. Ainsi, nous pourrions faire quelque chose comme ...
NZ = M.';
NZ = NZ(find(NZ))
NZ =
-0.6
1.8
-2.3
3.4
-3.8
-4.3
-0.6
3.4
Voir que j'ai utilisé. ' faire la transposition, juste au cas où les éléments seraient complexes.
@niko: Je vous suggère d'expliquer plus clairement ce que votre objectif était exact, puisque vous la question peut être interprétée différemment. J'aimerais savoir si je dois commencer à m'excuser. – Jonas