F#:如何创建除 Double 之外的任何其他类型的元素矩阵

标签 f# matrix types

我是 F# 的初学者。我知道有一种方法可以使用 PowerPack.dll 创建双矩阵:

let B = matrix [ [ 1.0; 7.0 ];
                 [ 1.0; 3.0 ] ]

如何使用我自己类型的元素创建矩阵(例如使用 [,] 而不是 Double),所以它看起来像:

let B = matrix [ [ [1,2]; [3,4] ];
                 [ [7,8]; [5,6] ] ]

最佳答案

我同意在处理数字时应主要使用矩阵。标准非通用矩阵类型(您可以使用 matrix 函数创建)适用于 float 类型的数字。如果您想使用其他数字类型,可以使用 Matrix.Generic 模块,该模块包含处理通用矩阵(包含任何类型)的功能。

您也可以使用通用矩阵来存储元组(如果需要)。可以使用 ofList 函数创建通用矩阵。您还可以为此定义一个函数以获得更好的语法:

let anymatrix = Matrix.Generic.ofList
let B = anymatrix [ [ [1,2]; [3,4] ]; 
                    [ [7,8]; [5,6] ] ]

要使用通用矩阵,您可以使用 Matrix.Generic 模块:

let Bt = Matrix.Generic.transpose B

通常,您只会将矩阵与数字类型一起使用,因为许多运算都需要一些算术运算才能起作用。这将适用于所有基本数字类型(例如 int),您还可以使用 GlobalAssociations discussed here 为您自己的类型提供算术运算。 .

但是,如果您只想存储一些值,那么还有其他(更合适的)数据类型。您还可以使用表示可变二维数组的 Array2D

关于F#:如何创建除 Double 之外的任何其他类型的元素矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2518000/

相关文章:

C# .NET - ItemCollection 在作为 IList<type> 传递时不编译

algorithm - 学习 F# - 打印质数

f# - 方便的 F# 片段

r - 通过切片行名将 2 列数据帧转换为矩阵 - R

c++ - OpenGL 让物体粘在相机上

c# - 如何将 Type 对象用作具体类型?

c# - 如何在 C# 代码中知道变量声明的类型

f# - 在F#: How do I obtain a list of the filenames in a directory; expected unit have string中

f# - 以乘法优先级解析 "x y z"

flutter - 你应该如何进行矩阵变换?