|
|
◆ MMRead()
| Sub MMRead |
( |
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 Skip As |
Long = 0, |
|
|
Optional Base As |
Long = 0, |
|
|
Optional Format As |
Long = 0, |
|
|
Optional Sort As |
Long = 0 |
|
) |
| |
Matrix Market形式ファイルの読み出し
- 目的
- 本ルーチンはMatrix Market形式ファイルから疎行列または密行列を読み出す. 疎行列は CSR, CSC または COO形式で格納する.
- 引数
-
| [in] | Fname | 入力ファイル名. |
| [out] | Nrow | 行列の行数. |
| [out] | Ncol | 行列の列数. |
| [out] | Nnz | 行列の非ゼロ要素数 (疎行列の場合のみ). |
| [out] | 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 (パターン) のときは参照されない. |
| [out] | Ptr() | 配列 Ptr(LPtr - 1) (LPtr >= Ncol + 1 (CSC形式で格納する場合), LPtr >= Nrow + 1 (CSR形式で格納する場合), LPtr >= Nnz (COO形式で格納する場合))
非ゼロ要素の行ポインタ(CSR形式で格納する場合), 列ポインタ(CSC形式で格納する場合), または, 行インデクス(COO形式で格納する場合).
格納形式 = 1 (密行列) のときは参照されない. |
| [out] | Ind() | 配列 Ind(LInd - 1) (LInd >= Nnz)
非ゼロ要素の行インデクス(CSC形式で格納する場合)または列インデクス(CSRまたはCOO形式で格納する場合).
格納形式 = 1 (密行列) のときは参照されない. |
| [out] | DataType | 行列のデータ型.
= 0: 実数.
= 2: パターン.
= 3: 整数. |
| [out] | MatShape | 行列の形状.
= 0: 一般行列.
= 1: 対称行列.
= 2: 歪対称(交代)行列. |
| [out] | MatForm | 行列の格納形式.
= 0: 疎行列.
= 1: 密行列. |
| [out] | Info | (省略可)
= 0: 正常終了.
= i < 0: (-i)番目の入力パラメータの誤り.
= 1: ファイルがオープンできなかった.
= 3: ファイル読み出しエラー.
= 4: タイプ指定の誤り. |
| [in] | Skip | (省略可)
データ読み出しをスキップするためのフラグ. (省略時 = 0)
= 0: すべてのデータを読み出す.
= 1: ヘッダーとサイズだけを読み出す(行列データを読み出さない). |
| [in] | Base | (省略可)
Ptr および Ind のインデクス形式. (省略時 = 0)
= 0: 0-ベース(C形式): 開始インデクス値が 0.
= 1: 1-ベース(Fortran形式): 開始インデクス値が 1. |
| [in] | Format | (省略可)
読み出した行列の格納形式. (省略時 = 0)
= 0: CSR形式.
= 1: CSC形式.
= 2: COO形式. |
| [in] | Sort | (省略可)
読み出した疎行列を行内で列番号の昇順(CSR の場合) または 列内で行番号の昇順(CSC の場合)に並べ替えるかどうかを指定. (省略時 = 0)
= 0: 並べ替えを行わない.
= 1: 並べ替えを行う. |
- 使用例
- 次の 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
Sub Ex_MMRead()
Dim M As Long, N As Long, Nnz As Long, DataType As Long, MatShape As Long, MatForm As Long
Dim A(8) As Double, Ia(3) As Long, Ja(8) As Long
Dim Info As Long
Call MMRead("Test_MMWrite.mtx", M, N, Nnz, A(), Ia(), Ja(), DataType, MatShape, MatForm, Info)
Debug.Print " MMRead: Info =" + Str(Info)
Debug.Print "M =" + Str(M) + ", N =" + Str(N) + ", Nnz =" + Str(Nnz)
Debug.Print "DataType =" + Str(DataType) + ", MatShape =" + Str(MatShape) + ", MatForm =" + Str(MatForm)
Debug.Print A(0), A(1), A(2), A(3), A(4), A(5), A(6), A(7), A(8)
Debug.Print Ia(0), Ia(1), Ia(2), Ia(3)
Debug.Print Ja(0), Ja(1), Ja(2), Ja(3), Ja(4), Ja(5), Ja(6), Ja(7), Ja(8)
End Sub
Sub MMRead(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 Skip As Long=0, Optional Base As Long=0, Optional Format As Long=0, Optional Sort As Long=0) Matrix Market形式ファイルの読み出し
- 実行結果
M = 3, N = 3, Nnz = 9
DataType = 0, MatShape = 0, MatForm = 0
0.2 -0.11 -0.93 -0.32 0.81 0.37 -0.8 -0.92 -0.29
0 3 6 9
0 1 2 0 1 2 0 1 2
|