Main Content

full

スパース行列を非スパース ストレージに変換

説明

A = full(S) は、スパース行列 S を、issparse(A) の戻り値が logical 0 (false) になる非スパースのストレージ構造に変換します。

すべて折りたたむ

行列のストレージ形式を変更し、ストレージ要件を比較します。

乱数スパース行列を作成します。MATLAB® のスパース行列の表示ではすべてのゼロが省略され、非ゼロ要素の位置と値が表示されます。

rng default %for reproducibility
S = sprand(8,8,0.3)
S = 
   (2,1)       0.0344
   (7,1)       0.4456
   (8,1)       0.7547
   (2,2)       0.4387
   (4,3)       0.7655
   (7,3)       0.6463
   (8,4)       0.2760
   (1,6)       0.9502
   (5,6)       0.1869
   (8,6)       0.6797
   (3,7)       0.3816
   (4,7)       0.7952
   (8,7)       0.6551
   (6,8)       0.4898
   (7,8)       0.7094

行列を非スパース ストレージに変換します。MATLAB での行列の表示に新しいストレージ形式が反映されます。

A = full(S)
A = 8×8

         0         0         0         0         0    0.9502         0         0
    0.0344    0.4387         0         0         0         0         0         0
         0         0         0         0         0         0    0.3816         0
         0         0    0.7655         0         0         0    0.7952         0
         0         0         0         0         0    0.1869         0         0
         0         0         0         0         0         0         0    0.4898
    0.4456         0    0.6463         0         0         0         0    0.7094
    0.7547         0         0    0.2760         0    0.6797    0.6551         0

次の 2 つの形式のストレージ要件を比較します。

  • A は 64 個の double (それぞれ 8 バイト)、すなわち 648=512 バイトのストレージを使用します。

  • S は、15 個の非ゼロ要素とその位置を表す 24 個の整数について、合計 398=312 バイトのストレージを使用します。

whos
  Name      Size            Bytes  Class     Attributes

  A         8x8               512  double              
  S         8x8               312  double    sparse    

入力引数

すべて折りたたむ

変換対象のスパース行列。行列として指定します。S が既に非スパース行列の場合、AS と同じになります。

ヒント

  • Xmn 列の行列で、nz 個の非ゼロ要素を含む場合、full(X) には m*n 個の要素を格納するためのスペースが必要です。その一方で、sparse(X)nz 個の要素と (nz+n+1) 個の整数を格納するためのスペースを必要とします。

    行列の密度 (nnz(X)/numel(X)) によって、行列をスパースまたは非スパースのいずれで保存するとより効率的であるかがわかります。正確な境界点は、行列のクラスとプラットフォームによって異なります。たとえば、32 ビット MATLAB® の場合、密度が 2/3 未満の double 型のスパース行列に必要なスペースは、非スパースの同じ行列より少なくなります。しかし、64 ビット MATLAB の場合、非ゼロの要素が半分未満の double 型の行列はスパース行列として保存する方がより効率的です。

拡張機能

C/C++ コード生成
MATLAB® Coder™ を使用して C および C++ コードを生成します。

バージョン履歴

R2006a より前に導入