これは実際には疎行列ではありません。MATLAB のスパース行列はそのように定義されています。sparse 関数または spdiags 関数を使用してその行列を定義する場合、ゼロ要素を格納する必要はなく、非ゼロ要素のみを格納する必要があります。もちろん、MATLAB は、これらの真のスパース行列を他の標準 double 配列と組み合わせて使用する方法を知っています。
最後に、真のスパース行列は、通常、これよりもはるかにスパースです。または、スパース ストレージ フォームをまったく使用する必要はありません。
いずれにせよ、ANY 行列の非ゼロ要素のみが必要な場合は、次のようにすることができます。
NZ = M(M ~= 0);
あるいは、
NZ = M(find(M));
どちらも非ゼロを列ごとに並べます。これは、数値が MATLAB の行列に格納される方法であるためです。
NZ = M(find(M))
NZ =
-0.6
-0.6
1.8
-2.3
3.4
3.4
-3.8
-4.3
あなたの質問では、行ごとにこれを行う方法を尋ね、最初の行でゼロ以外の要素を抽出し、次に2行目などを抽出しました.
これは、最初に配列を転置することによって最も簡単に実行できます。したがって、次のようなことをするかもしれません...
NZ = M.';
NZ = NZ(find(NZ))
NZ =
-0.6
1.8
-2.3
3.4
-3.8
-4.3
-0.6
3.4
私が使ったことを見てください。要素が複雑な場合に備えて、転置を行います。