使用 Math.Net 从数组创建矩阵
Create matrix from array with Math.Net
我有一个由数字子列表组成的列表。这被命名为 biglist
,它是:
biglist[0] = { 1, 2, 3, 4, 5 };
biglist[1] = { 5, 3, 3, 2, 1 };
biglist[2] = { 3, 4, 4, 5, 2 };
现在我想使用这些子列表创建一个 matrix
,其中每个子列表代表 matrix
的 列 。我的最终结果必须是这样的 matrix
5x3:
1 | 5 | 3
---------
2 | 3 | 4
---------
3 | 3 | 4
---------
4 | 2 | 5
---------
5 | 1 | 2
我知道如何将 list
转换为 array
但我不知道如何 assemble 这些数组来创建 matrix
.
我认为包 Math.Net
可以满足我的目的,但我不明白如何使用它来做到这一点。
如果我很了解你,你正在尝试做这样的事情:
public static int[,] GetMatrix(IReadOnlyList<int[]> bigList)
{
if (bigList.Count == 0) throw new ArgumentException("Value cannot be an empty collection.", nameof(bigList));
var matrix = new int[bigList.Count, bigList[0].Length];
for (var bigListIndex = 0; bigListIndex < bigList.Count; bigListIndex++)
{
int[] list = bigList[bigListIndex];
for (var numberIndex = 0; numberIndex < list.Length; numberIndex++) matrix[bigListIndex, numberIndex] = list[numberIndex];
}
return matrix;
}
private static void Main(string[] args)
{
var biglist = new List<int[]>
{
new[] {1, 2, 3, 4, 5},
new[] {5, 3, 3, 2, 1},
new[] {3, 4, 4, 5, 2}
};
int[,] matrix = GetMatrix(biglist);
for (var i = 0; i < matrix.GetLength(1); i++)
{
for (var j = 0; j < matrix.GetLength(0); j++)
Console.Write($" {matrix[j, i]} ");
Console.WriteLine();
}
Console.ReadKey();
}
MathNet
限制 是您只能使用 Double
、Single
、Complex
或 Complex32
数字为此目的类型。
using MathNet.Numerics.LinearAlgebra;
// ...
double[][] biglist = new double[3][];
biglist[0] = new double[] { 1, 2, 3, 4, 5 };
biglist[1] = new double[] { 5, 3, 3, 2, 1 };
biglist[2] = new double[] { 3, 4, 4, 5, 2 };
Matrix<double> matrix = Matrix<double>.Build.DenseOfColumns(biglist);
Console.WriteLine(matrix);
给出:
DenseMatrix 5x3-Double
1 5 3
2 3 4
3 3 4
4 2 5
5 1 2
我有一个由数字子列表组成的列表。这被命名为 biglist
,它是:
biglist[0] = { 1, 2, 3, 4, 5 };
biglist[1] = { 5, 3, 3, 2, 1 };
biglist[2] = { 3, 4, 4, 5, 2 };
现在我想使用这些子列表创建一个 matrix
,其中每个子列表代表 matrix
的 列 。我的最终结果必须是这样的 matrix
5x3:
1 | 5 | 3
---------
2 | 3 | 4
---------
3 | 3 | 4
---------
4 | 2 | 5
---------
5 | 1 | 2
我知道如何将 list
转换为 array
但我不知道如何 assemble 这些数组来创建 matrix
.
我认为包 Math.Net
可以满足我的目的,但我不明白如何使用它来做到这一点。
如果我很了解你,你正在尝试做这样的事情:
public static int[,] GetMatrix(IReadOnlyList<int[]> bigList)
{
if (bigList.Count == 0) throw new ArgumentException("Value cannot be an empty collection.", nameof(bigList));
var matrix = new int[bigList.Count, bigList[0].Length];
for (var bigListIndex = 0; bigListIndex < bigList.Count; bigListIndex++)
{
int[] list = bigList[bigListIndex];
for (var numberIndex = 0; numberIndex < list.Length; numberIndex++) matrix[bigListIndex, numberIndex] = list[numberIndex];
}
return matrix;
}
private static void Main(string[] args)
{
var biglist = new List<int[]>
{
new[] {1, 2, 3, 4, 5},
new[] {5, 3, 3, 2, 1},
new[] {3, 4, 4, 5, 2}
};
int[,] matrix = GetMatrix(biglist);
for (var i = 0; i < matrix.GetLength(1); i++)
{
for (var j = 0; j < matrix.GetLength(0); j++)
Console.Write($" {matrix[j, i]} ");
Console.WriteLine();
}
Console.ReadKey();
}
MathNet
限制 是您只能使用 Double
、Single
、Complex
或 Complex32
数字为此目的类型。
using MathNet.Numerics.LinearAlgebra;
// ...
double[][] biglist = new double[3][];
biglist[0] = new double[] { 1, 2, 3, 4, 5 };
biglist[1] = new double[] { 5, 3, 3, 2, 1 };
biglist[2] = new double[] { 3, 4, 4, 5, 2 };
Matrix<double> matrix = Matrix<double>.Build.DenseOfColumns(biglist);
Console.WriteLine(matrix);
给出:
DenseMatrix 5x3-Double
1 5 3
2 3 4
3 3 4
4 2 5
5 1 2