Math.NET Numerics - 将 double 数组转换为 Matrix<double>

3
假设我有以下代码: double[] someArray = new [] { 11, 12, 13, 14, 21, 22, 23, 24, 31, 32, 33, 34, 41, 42, 43, 44 }; 是否有现成的方法可以将这个数组转换为一个4x4的矩阵,而无需手动将其拆分为4个数组?
我知道这很简单,但我正在探索现成的解决方案。
编辑:
抱歉没有表达清楚(以为标题已经说明):
我想知道 Math.NET Numerics 中的矩阵生成器是否有现成的功能。例如: Matrix<double> someMatrix = DenseMatrix.OfArray(columns: 4, rows: 4, data: someArray);

这个数组中的值如何对应矩阵中的值?Math.NET Numerics密集矩阵在内部使用列主序,但其他库可能使用行主序或完全不同的顺序。 - Christoph Rüegg
在这种情况下,someArray 是按列主序排列的。 - johnildergleidisson
1个回答

5

从查看文档,你可以直接使用构造函数或者函数OfColumnMajor(int rows, int columns, IEnumerable<double> columnMajor),如果你的数据是按列主序排列的。

代码如下:

//Using the constructor
Matrix<double> someMatrix = new DenseMatrix(4, 4, someArray)

//Using the static function
Matrix<double> someMatrix = DenseMatrix.OfColumnMajor(4, 4, someArray);

如果您的数据是按行主序排列的,您可以将其拆分成数组并使用其中一个OfRows函数,或者像Christoph建议的那样使用构造函数并转置矩阵。


是的,只要数组按列主序排列。 - Christoph Rüegg
是的,否则就没有OfRowMajor函数,你需要将其拆分为数组并使用OfRows函数。 - Meta-Knight
1
注意:如果数据是按列主序排列的,您也可以直接使用构造函数。实际上,这是创建密集矩阵最有效的方法。 - Christoph Rüegg
1
如果是行主序,您仍然可以使用构造函数(交换列/行维度)然后转置结果矩阵。 - Christoph Rüegg
@ChristophRüegg 感谢您提供有用的额外信息。这是我接下来要问的问题(行主要情况)。 - johnildergleidisson

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接