|
|
◆ MMWrite()
| Sub MMWrite |
( |
Fname As |
String, |
|
|
Nrow As |
Long, |
|
|
Ncol As |
Long, |
|
|
Nnz As |
Long, |
|
|
Val() As |
Double, |
|
|
Ptr() As |
Long, |
|
|
Ind() As |
Long, |
|
|
DataType As |
Long, |
|
|
MatShape As |
Long, |
|
|
MatForm As |
Long, |
|
|
Optional Info As |
Long, |
|
|
Optional Fchk As |
Long = 0, |
|
|
Optional Base As |
Long = -1, |
|
|
Optional Format As |
Long = 0 |
|
) |
| |
Matrix Market形式ファイルへの書き込み
- 目的
- Matrix Market形式ファイルに疎行列(CSR, CSC または COO形式)または密行列を書き込む.
疎行列データの内容チェックは行わずに格納順にそのまま書き込む.
- 引数
-
| [in] | Fname | 出力ファイル名. |
| [in] | Nrow | 行列の行数. |
| [in] | Ncol | 行列の列数. |
| [in] | Nnz | 行列の非ゼロ要素数. |
| [in] | Val() | 配列 Val(LVal - 1) (LValは次のとおり)
格納形式 データ型 行列の形状 LVal (最小値)
---------- ------------------------ ------------------- -----------------
0 (疎行列) 0 (実数) または 3 (整数) Nnz
1 (密行列) 0 (実数) または 3 (整数) 0 (一般行列) Nrow*Ncol
1 (対称行列) Ncol*(Ncol + 1)/2
2 (歪対称行列) Ncol*(Ncol - 1)/2
疎行列の非ゼロ要素, または, 密行列の全要素.
データ型が整数のときには書き込み時に丸められる.
データ型 = 2 (パターン) のときは参照されない. |
| [in] | Ptr() | 配列 Ptr(LPtr - 1) (LPtr >= Ncol + 1 (CSC形式を書き込む場合), LPtr >= Nrow + 1 (CSR形式を書き込む場合), LPtr >= Nnz (COO形式を書き込む場合))
非ゼロ要素の行ポインタ(CSR形式を書き込む場合), 列ポインタ(CSC形式を書き込む場合), または, 行インデクス(COO形式を書き込む場合).
格納形式 = 1 (密行列) のときは参照されない. |
| [in] | Ind() | 配列 Ind(LInd - 1) (LInd >= Nnz)
非ゼロ要素の行インデクス(CSC形式を書き込む場合)または列インデクス(CSRまたはCOO形式を書き込む場合).
格納形式 = 1 (密行列) のときは参照されない. |
| [in] | DataType | 行列のデータ型.
= 0: 実数.
= 2: パターン.
= 3: 整数. |
| [in] | MatShape | 行列の形状.
= 0: 一般行列.
= 1: 対称行列.
= 2: 歪対称(交代)行列. |
| [in] | MatForm | 行列の格納形式.
= 0: 疎行列.
= 1: 密行列. |
| [out] | Info | (省略可)
= 0: 正常終了.
= i < 0: (-i)番目の入力パラメータの誤り.
= 1: ファイルがオープンできなかった.
= 2: ファイルがすでに存在する.
= 4: タイプ指定の誤り. |
| [in] | Fchk | (省略可)
出力ファイルのチェックフラグ. (省略時 = 0)
= 0: 指定されたファイルがすでに存在してかどうかをチェックせずに上書きする.
= 1: 指定されたファイルがすでに存在していればエラー(Info = 2)を返す. |
| [in] | Base | (省略可)
MatForm = 0 (疎行列) のときの Ptr および Ind のインデクス形式. (省略時 = Ptr(0) (CSR または CSC (Format = 0 または 1) の場合), 0 (COO (Format = 2) の場合))
= 0: 0-ベース(C形式): 開始インデクス値が 0.
= 1: 1-ベース(Fortran形式): 開始インデクス値が 1. |
| [in] | Format | (省略可)
疎行列の格納形式. (省略時 = 0)
= 0: CSR形式.
= 1: CSC形式.
= 2: COO形式. |
- 使用例
- 次の行列を Matrix Market 形式ファイル (Test_MMWrite.mtx) に書き込む.
( 0.2 -0.11 -0.93 )
A = ( -0.32 0.81 0.37 )
( -0.8 -0.92 -0.29 )
Sub Ex_MMWrite()
Const M = 3, N = 3, Nnz = M * N
Const DataType = 0, MatShape = 0, MatForm = 0
Dim A(Nnz - 1) As Double, Ia(M) As Long, Ja(Nnz - 1) As Long
Dim Info As Long
A(0) = 0.2: A(1) = -0.11: A(2) = -0.93: A(3) = -0.32: A(4) = 0.81: A(5) = 0.37: A(6) = -0.8: A(7) = -0.92: A(8) = -0.29
Ia(0) = 0: Ia(1) = 3: Ia(2) = 6: Ia(3) = 9
Ja(0) = 0: Ja(1) = 1: Ja(2) = 2: Ja(3) = 0: Ja(4) = 1: Ja(5) = 2: Ja(6) = 0: Ja(7) = 1: Ja(8) = 2
Call MMWrite("Test_MMWrite.mtx", M, N, Nnz, A(), Ia(), Ja(), DataType, MatShape, MatForm, Info)
Debug.Print " MMWrite: Info =" + Str(Info)
End Sub
Sub MMWrite(Fname As String, Nrow As Long, Ncol As Long, Nnz As Long, Val() As Double, Ptr() As Long, Ind() As Long, DataType As Long, MatShape As Long, MatForm As Long, Optional Info As Long, Optional Fchk As Long=0, Optional Base As Long=-1, Optional Format As Long=0) Matrix Market形式ファイルへの書き込み
- 実行結果
- 実行結果 (Test_MMWrite.mtx ファイル)
%%MatrixMarket matrix coordinate real general
3 3 9
1 1 2.000000000000000e-01
1 2 -1.100000000000000e-01
1 3 -9.300000000000000e-01
2 1 -3.200000000000000e-01
2 2 8.100000000000001e-01
2 3 3.700000000000000e-01
3 1 -8.000000000000000e-01
3 2 -9.200000000000000e-01
3 3 -2.900000000000000e-01
|