linear-algebra/backends/default
このページは、現在の 0.4.7 リポジトリにおける Luna-Flow/linear-algebra/backends/default の公開 API 基準をまとめたものです。
役割
backends/default は、既存の密 mutable / immut 実装を包む、このパッケージ 所有のラッパー型を提供します。これらのラッパー型は既定バックエンドパッケージが 所有するため、MoonBit の foreign trait / foreign type ルールを破ることなく、 公開 @algebra trait を実装できます。
DenseVector[T]
moonbit
///|
test "DenseVector wraps a mutable vector backend" {
let vector : @default.DenseVector[Int] = @default.DenseVector::from_array([
1, 2, 3,
])
inspect(vector.length(), content="3")
inspect(vector[1], content="2")
}既定の可変密ベクトルバックエンドを包む所有ラッパーです。
コンストラクタとアクセサ
DenseVector::from_backend(inner : @mutable.Vector[T]) -> DenseVector[T]既存の可変ベクトルを包みます。DenseVector::from_array(data : Array[T]) -> DenseVector[T]配列から可変密ベクトルを構築します。DenseVector::make(length : Int, value : T) -> DenseVector[T]全要素がvalueのベクトルを構築します。DenseVector::inner(self) -> @mutable.Vector[T]内部の可変ベクトルを返します。DenseVector::length(self) -> Intベクトル長を返します。DenseVector::op_get(self, index : Int) -> T読み取りインデックスアクセスを提供します。
バックエンドメソッド
DenseVector::scale(self, scalar : T) -> DenseVector[T]ベクトルを要素ごとにスケールし、新しい既定バックエンド値を返します。DenseVector::dot(self, other : DenseVector[T]) -> Tスカラーのドット積を計算します。DenseVector::axpy(self, alpha : T, other : DenseVector[T]) -> DenseVector[T]BLAS 風のalpha * self + otherを計算します。
trait 実装
Add、Neg、Sub、Mul。対応する要素演算の制約付きです。- 任意の
Tに対する@algebra.VectorShape T : Add + Negのときの@algebra.AdditiveVectorT : Add + Neg + Mulのときの@algebra.VecMulVector
DenseMatrix[T]
moonbit
///|
test "DenseMatrix wraps a mutable matrix backend" {
let matrix : @default.DenseMatrix[Int] = @default.DenseMatrix::from_2d_array([
[1, 2],
[3, 4],
])
inspect(matrix.row(), content="2")
inspect(matrix.col(), content="2")
}既定の可変密行列バックエンドを包む所有ラッパーです。
コンストラクタとアクセサ
DenseMatrix::from_backend(inner : @mutable.Matrix[T]) -> DenseMatrix[T]既存の可変行列を包みます。DenseMatrix::from_2d_array(data : Array[Array[T]]) -> DenseMatrix[T]行優先の二次元配列から行列を構築します。DenseMatrix::new(row : Int, col : Int, value : T) -> DenseMatrix[T]全要素がvalueの行列を構築します。DenseMatrix::inner(self) -> @mutable.Matrix[T]内部の可変行列を返します。DenseMatrix::row(self) -> Int行数を返します。DenseMatrix::col(self) -> Int列数を返します。
バックエンドメソッド
DenseMatrix::matvec(self, vector : DenseVector[T]) -> DenseVector[T]行列と既定バックエンド密ベクトルの積を計算し、新しい密ベクトルラッパーを返します。
trait 実装
Add、Neg、Sub、Mul。対応する要素演算の制約付きです。- 任意の
Tに対する@algebra.MatrixShapeと@algebra.TransposeMatrix T : Add + Negのときの@algebra.AdditiveMatrixT : Add + Neg + AddMonoid + Mulのときの@algebra.MatMulMatrix
ImmutableDenseVector[T]
moonbit
///|
test "ImmutableDenseVector wraps an immutable vector backend" {
let vector : @default.ImmutableDenseVector[Int] = @default.ImmutableDenseVector::from_array([
1, 2, 3,
],
)
inspect(vector.length(), content="3")
inspect(vector[2], content="3")
}既定の不変密ベクトルバックエンドを包む所有ラッパーです。
コンストラクタとアクセサ
ImmutableDenseVector::from_backend(inner : @immut.Vector[T])ImmutableDenseVector::from_array(data : Array[T])ImmutableDenseVector::make(length : Int, value : T)ImmutableDenseVector::inner(self) -> @immut.Vector[T]ImmutableDenseVector::length(self) -> IntImmutableDenseVector::op_get(self, index : Int) -> T
バックエンドメソッド
ImmutableDenseVector::scale(self, scalar : T) -> ImmutableDenseVector[T]ImmutableDenseVector::dot(self, other : ImmutableDenseVector[T]) -> TImmutableDenseVector::axpy(self, alpha : T, other : ImmutableDenseVector[T]) -> ImmutableDenseVector[T]
trait 実装
Add、Neg、Sub、Mul。対応する要素演算の制約付きです。- 任意の
Tに対する@algebra.VectorShape T : Add + Negのときの@algebra.AdditiveVectorT : Add + Neg + Mulのときの@algebra.VecMulVector
ImmutableDenseMatrix[T]
moonbit
///|
test "ImmutableDenseMatrix wraps an immutable matrix backend" {
let matrix : @default.ImmutableDenseMatrix[Int] = @default.ImmutableDenseMatrix::from_2d_array([
[1, 2],
[3, 4],
],
)
inspect(matrix.row(), content="2")
inspect(matrix.col(), content="2")
}既定の不変密行列バックエンドを包む所有ラッパーです。
コンストラクタとアクセサ
ImmutableDenseMatrix::from_backend(inner : @immut.Matrix[T])ImmutableDenseMatrix::from_2d_array(data : Array[Array[T]])ImmutableDenseMatrix::new(row : Int, col : Int, value : T)ImmutableDenseMatrix::inner(self) -> @immut.Matrix[T]ImmutableDenseMatrix::row(self) -> IntImmutableDenseMatrix::col(self) -> Int
バックエンドメソッド
ImmutableDenseMatrix::matvec(self, vector : ImmutableDenseVector[T]) -> ImmutableDenseVector[T]行列と不変密ベクトルの積を計算し、新しい不変密ベクトルラッパーを返します。
trait 実装
Add、Neg、Sub、Mul。対応する要素演算の制約付きです。- 任意の
Tに対する@algebra.MatrixShapeと@algebra.TransposeMatrix T : Add + Negのときの@algebra.AdditiveMatrixT : Add + Neg + Zero + Mulのときの@algebra.MatMulMatrix
汎用補助関数
shape_of[M : @algebra.MatrixShape](matrix : M) -> (Int, Int)オブジェクトの形状を返します。matmul[M : @algebra.MatMulMatrix](left : M, right : M) -> M明示的な乗算能力を通して行列乗算を分配します。transpose[M : @algebra.TransposeMatrix](matrix : M) -> Malgebra trait を通して閉じた転置を分配します。
境界
このパッケージは、既定バックエンドのラッパー型に外側の algebra trait を 実装します。新しい構造 trait は定義しません。ここで説明したスカラーのドット積や 行列-ベクトル相互作用も新しい @algebra trait にはせず、バックエンドメソッドの ままにしています。ノルム、求解、分解も、構造 trait または同型の閉じた演算として 表現できる場合を除き、バックエンドメソッドまたは将来の専用アルゴリズム層 API に 置くべきです。