Lisys = LAPACK wrapper for C# + Matrix/Vector + Some well-known statistical techniques
- Vector, RowVector, ColumnVector
- Matrix
- Eigenvalues/vectors
- Singular Value Decomposition
- LU Decomposition
- Solver
- Linear Discriminant Analysis
- ...etc
-
LAPACK と Mingw の lib/dll を取得
次のサイトを参考に Windows 用の lib/dll をダウンロード
http://icl.cs.utk.edu/lapack-for-windows/lapack/#librairies
(Section: "Prebuilt dynamic libraries using Mingw")
-
"law" プロジェクトを以下のように設定
http://icl.cs.utk.edu/lapack-for-windows/lapack/#librairies
Section: "Prebuilt dynamic libraries using Mingw" の Instructions に従って設定する.
-
"law" -> "lisys" の順番でプロジェクトをビルド
-
自身のプロジェクトにおける「参照の追加」で以下のファイルを設定
lisys.dll
law.dll
一緒に
*.xml
がコピーされ,Visual Studio 上でパラメータヒントが出るようになります. -
Windows のルールに従って LAPACK 関連の DLL を配置
liblapack.dll
libblas.dll
libgcc_s_dw2-1.dll
libgfortran-3.dll
libquadmath-0.dll
NUnit を利用しています.
- NUnit をインストール
- test プロジェクトをビルド
- test/data フォルダを test/bin/Debug 以下にコピー
- NUnit から test/bin/Debug/test.dll を実行
const int C = 3;
var data = new Matrix[C];
// input
for (int i = 0; i < C; ++i)
{
data[i] =
File.ReadAllLines(String.Format("data/iris/data_{0}.csv", i), Encoding.UTF8)
.Select(line =>
line.Split(',').Select(s => Double.Parse(s)).ToRow())
.ToMatrix();
}
Lda result = Func.Lda(data);
// Coefficients of linear discriminants
var ldc1 = new ColumnVector(result.Eigenvectors[0]);
var ldc2 = new ColumnVector(result.Eigenvectors[1]);
var coef = new Matrix(ldc1, ldc2);
for (int i = 0; i < C; ++i)
{
var m = data[i] * coef; // calculate scores
// output
File.WriteAllText(String.Format("result_{0}.csv", i), Matrix.ToCsv(m), Encoding.UTF8);
}
var m = new Matrix(new[,] {
{86.0, 67.0},
// ...
{96.0, 61.0} });
// correlation matrix
var cor1 = Func.Correlate(m, Func.Target.EachColumn);
MatrixVisualizer.TestShowVisualizer(cor1); // test method of DebuggerVisualizer
// normalization -> correlation matrix
var n = new Matrix(m);
n.Columns.ForEach((ci, cv) => {
var avg = cv.Average;
var std = Math.Sqrt(cv.UnbiasedVariance);
cv.Apply((i, val) => (val - avg) / std);
});
var cor2 = Matrix.T(n) * n / (n.RowSize - 1);
MatrixVisualizer.TestShowVisualizer(cor2);
その他細かな利用方法は test
や sample
プロジェクトを参照してください.
MIT License
Copyright (C) 2007- KrdLab All Rights Reserved.
- 64bit 対応