XLPack 7.0
XLPack 数値計算ライブラリ (Excel VBA) リファレンスマニュアル
読み取り中…
検索中…
一致する文字列を見つけられません

◆ ZMMRead()

Sub ZMMRead ( Fname As  String,
Nrow As  Long,
Ncol As  Long,
Nnz As  Long,
Val() As  Complex,
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 (疎行列)                       Nnz
1 (密行列)  0 (一般行列)         Nrow*Ncol
            1 (対称行列)         Ncol*(Ncol + 1)/2
            2 (歪対称行列)       Ncol*(Ncol - 1)/2
            3 (エルミート行列)   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行列のデータ型.
= 1: 複素数
= 2: パターン.
[out]MatShape行列の形状.
= 0: 一般行列.
= 1: 対称行列.
= 2: 歪対称(交代)行列.
= 3: エルミート行列.
[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_ZMMWrite.mtx) を読み出す.
%%MatrixMarket matrix coordinate complex general
3 3 9
1 1 7.800000000000000e-01 1.600000000000000e-01
1 2 -9.000000000000000e-01 -1.460000000000000e+00
1 3 4.800000000000000e-01 -1.080000000000000e+00
2 1 7.300000000000000e-01 6.300000000000000e-01
2 2 1.580000000000000e+00 -1.240000000000000e+00
2 3 -4.100000000000000e-01 -9.100000000000000e-01
3 1 2.300000000000000e-01 -1.370000000000000e+00
3 2 7.900000000000000e-01 6.400000000000000e-01
3 3 -7.300000000000000e-01 -1.500000000000000e+00
Sub Ex_ZMMRead()
Dim M As Long, N As Long, Nnz As Long, DataType As Long, MatShape As Long, MatForm As Long
Dim A(8) As Complex, Ia(3) As Long, Ja(8) As Long
Dim Info As Long
Call ZMMRead("Test_ZMMWrite.mtx", M, N, Nnz, A(), Ia(), Ja(), DataType, MatShape, MatForm, Info)
Debug.Print "ZMMRead: 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 "(" + Str(Creal(A(0))) + "," + Str(Cimag(A(0))) + ")", "(" + Str(Creal(A(1))) + "," + Str(Cimag(A(1))) + ")", "(" + Str(Creal(A(2))) + "," + Str(Cimag(A(2))) + ")"
Debug.Print "(" + Str(Creal(A(3))) + "," + Str(Cimag(A(3))) + ")", "(" + Str(Creal(A(4))) + "," + Str(Cimag(A(4))) + ")", "(" + Str(Creal(A(5))) + "," + Str(Cimag(A(5))) + ")"
Debug.Print "(" + Str(Creal(A(6))) + "," + Str(Cimag(A(6))) + ")", "(" + Str(Creal(A(7))) + "," + Str(Cimag(A(7))) + ")", "(" + Str(Creal(A(8))) + "," + Str(Cimag(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
Function Cimag(A As Complex) As Double
複素数の虚数部
Function Creal(A As Complex) As Double
複素数の実数部
Sub ZMMRead(Fname As String, Nrow As Long, Ncol As Long, Nnz As Long, Val() As Complex, 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形式ファイルの読み出し (複素行列)
実行結果
ZMMRead: Info = 0
M = 3, N = 3, Nnz = 9
DataType = 1, MatShape = 0, MatForm = 0
( .78, .16) (-.9,-1.46) ( .48,-1.08)
( .73, .63) ( 1.58,-1.24) (-.41,-.91)
( .23,-1.37) ( .79, .64) (-.73,-1.5)
0 3 6 9
0 1 2 0 1 2 0 1 2