2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

C#で行列計算(Generic Math)

Last updated at Posted at 2023-02-06

C#には標準で行列を扱うクラスが無いので自分で作ってみました。ご自由にお使いください。

.Net 7.0, C# 11から導入されたGeneric Mathを使用してGenericクラスにしてみました。

  • INumberBase<T>を使用しています
    →複素数でも行列計算できます
  • IPowerFunctionsIRootFunctionsINumberBase<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 タグを追加。タイトル、文章を修正

2
1
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?