C# 在Math.Net多重回归中使用矩阵和向量类型

C# 在Math.Net多重回归中使用矩阵和向量类型,c#,matrix,vector,linear-regression,math.net,C#,Matrix,Vector,Linear Regression,Math.net,我声明了一个MathNet矩阵和向量类型,如下所示 Matrix<double> X = Matrix<double>.Build.Dense(sampleSize,2); Vector<double> yObserved = Vector<double>.Build.Dense(sampleSize); Matrix X=Matrix.Build.Dense(样本大小,2); Vector yObserved=Vector.Build.Dens

我声明了一个MathNet矩阵和向量类型,如下所示

Matrix<double> X = Matrix<double>.Build.Dense(sampleSize,2);
Vector<double> yObserved = Vector<double>.Build.Dense(sampleSize);
Matrix X=Matrix.Build.Dense(样本大小,2);
Vector yObserved=Vector.Build.Dense(样本化);
但是当我打电话的时候

Vector<double> p = MultipleRegression.NormalEquations(X, yObserved, true);
Vector p=MultipleRegression.NormalEquations(X,yObserved,true);
VisualStudio给出了错误消息

错误CS0411无法从用法推断方法“MultipleRegression.NormalEquations(T[],T[],bool)”的类型参数。尝试显式指定类型参数

如果不是这样的话,我该如何用矩阵和向量参数调用MultipleRegression类呢?为什么VisualStudio发现我的类型编码模棱两可


我的代码可以很好地处理矩阵的锯齿数组;现在我想让它与矩阵/向量类型一起运行。

多重回归的重载。NormalEquations()只有两个参数用于
矩阵
向量
参数集组合

添加布尔参数会混淆它,使它认为您试图提供
T[],T[],bool
的参数,而不是
Matrix,Vector

我不知道拦截意味着什么,但你必须研究一下没有它它会做什么。将参数转换为
T[][]
T[]
或不使用布尔值调用它(见下文)

var p=MultipleRegression.NormalEquations(X,yObserved);

谢谢。是的,显然,(矩阵,向量)参数重载与(T[],T[])交错数组参数重载的API不同。布尔值=true告诉后者包含x^0(截距)项。对于前一个重载,如果需要x^0项,则需要在矩阵中包含一列1,这太糟糕了,因为现在有些时候要乘以1。(回想一下,x^0的计算结果总是为1。)尝试以下操作:
double[]p=MultipleRegression.NormalEquations(x.ToColumnArrays(),yObserved.ToArray(),true)您的解决方案是可行的,但这里的目标是使用原生MathNet数据类型(如矩阵和向量)来最大限度地提高性能。因此,在这个解决方案中,我们试图避免将数组作为参数。只需删除下面答案中建议的第三个论点即可解决问题。请将该答案标记为已接受,以便人们知道您的问题已解决。请阅读以下内容:。
var p = MultipleRegression.NormalEquations(X, yObserved);
var p = MultipleRegression.NormalEquations<double>(X, yObserved);