Main Content

spalloc

スパース行列に対するメモリの割り当て

説明

S = spalloc(m,n,nz) は、nz 個の非ゼロ要素を保存するスペースのある、すべての要素がゼロの mn 列のスパース行列 S を作成します。ここで、nz >= 1 です。

すべて折りたたむ

spalloc を使用して、最大 20 個の非ゼロ要素を保存するスペースをもつ、全要素がゼロの 10 行 10 列のスパース行列を初期化します。

S = spalloc(10,10,20);

行列内のいくつかの要素を定義します。

S(1:3,1:3) = magic(3)
S = 
   (1,1)        8
   (2,1)        3
   (3,1)        4
   (1,2)        1
   (2,2)        5
   (3,2)        9
   (1,3)        6
   (2,3)        7
   (3,3)        2

行列内の非ゼロ要素の数を表示します。

n1 = nnz(S)
n1 = 9

行列内の非ゼロ要素に割り当てられたストレージの量を表示します。

n2 = nzmax(S)
n2 = 20

spalloc を使用して、100 個の非ゼロ要素のスペースをもつ、全要素がゼロの 20 行 20 列のスパース行列を初期化します。

n = 20;
S = spalloc(n,n,5*n);

次に、for ループを使用して、列ごとに最大 5 個の非ゼロ要素の平均で S の列を 1 つずつ埋めていきます。

for j = 1:n
    S(:,j) = [zeros(n-5,1); round(rand(5,1))];
end

行列 S のスパース パターンをプロットします。ドットは非ゼロ要素を表します。

spy(S)

Figure contains an axes object. The axes object with xlabel nz = 54 contains a line object which displays its values using only markers.

行列内の非ゼロ要素の数を表示します。

n1 = nnz(S)
n1 = 54

行列内の非ゼロ要素に割り当てられたストレージの量を表示します。

n2 = nzmax(S)
n2 = 100

入力引数

すべて折りたたむ

行列の行数。非負の整数として指定します。

データ型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | logical

行列の列数。非負の整数として指定します。

データ型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | logical

非ゼロ要素のストレージ割り当て。非負の整数として指定します。nz の値を 0 に指定すると、spalloc は代わりに nz の値を 1 に設定します。

データ型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | logical

制限

  • 行列の次元は、mn のどちらについても、32 ビット プラットフォームでは 2^31-1、64 ビット プラットフォームでは 2^48-1 より小さくなければなりません。

ヒント

  • spalloc で作成した行列に複数回代入する場合は、メモリの事前割り当てによって再割り当ての繰り返しを回避できます。ただし、スパース行列への代入はそれでも比較的負荷の高い処理であるため、次のいずれかで簡単に置き換えられる場合は通常は避けてください。

    • 関数 sparse を 1 回呼び出す

    • 関数 spdiags を 1 回呼び出す

    • 一連の行列 (スパース行列、密行列、または両方) を 1 回連結する

拡張機能

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

バージョン履歴

R2006a より前に導入