C#には標準で行列を扱うクラスが無いので自分で作ってみました。ご自由にお使いください。
.Net 7.0, C# 11から導入されたGeneric Mathを使用してGenericクラスにしてみました。
-
INumberBase<T>
を使用しています
→複素数でも行列計算できます -
IPowerFunctions
とIRootFunctions
はINumberBase<T>
にはない
→標準偏差、標準誤差を計算するメソッドはIFloatingPointIeee754
の拡張メソッドとして実装している
以下はテストからの抜粋ですが、使用例です。
var arr = new double[2, 2] { { 1, 2 }, { 3, 4 } };
var matrix = new Matrix<double>(arr);
var arr2 = new double[2] { 1, 1 };
var rowVec = new RowVector<double>(arr2);
Console.WriteLine(matrix * rowVec);
// [[3], [7]]
インデクサーも実装してありますので、最初に行数と列数だけ指定して後から値入れることもできます(どちらかというと、自分のコードではこちらのインデクサーを使うことが多いです)。
あったらよさげな機能、より計算時間を削減できるような効率的な実装方法、問題点などあれば是非コメントください。
行列以外の部分についてもコメントをお待ちしております。
更新履歴
2023/03/12 Generic MathでGeneric化
2023/03/22 タグを追加。タイトル、文章を修正