MathNet.Numerics操作返回类型

时间:2013-10-29 16:22:07

标签: c# mathnet

我正在使用MathsNet.Numerics lib。我想对复杂载体进行操作,即我是 using MathNet.Numerics.LinearAlgebra.Complex
这使我Vector成为MathNet.Numerics.LinearAlgebra.Generic.Vector<T>的复杂版本 但Vector上的操作不会返回可分配给Vector的对象:

Complex[] complexData = new Complex[n]
... fill data, fft etc ...
Vector vectorReference = new DenseVector(complexData);
vectorReference = vectorReference.Conjugate(); // Error.
  

错误CS0266:无法隐式转换类型   'MathNet.Numerics.LinearAlgebra.Generic.Vector<System.Numerics.Complex>'   到'MathNet.Numerics.LinearAlgebra.Complex.Vector'

为什么在Vector上操作的方法(例如ConjugatePointwiseMultiply)的返回值无法分配给Vector

1 个答案:

答案 0 :(得分:1)

类型层次结构:Vector<T> <- Complex.Vector <- Complex.DenseVector

.Net在覆盖方法时不支持对返回类型(协方差)进行专门化,因此我们在技术上无法修改Conjugate以在派生类型中返回Complex.Vector甚至Complex.DenseVector

一般来说,我们建议在字段和方法参数中预期和使用泛型类型(即Vector<Complex>) - 或者当您打算重用变量时。在Math.NET Numerics v3中,这已经过简化,因此几乎不需要使用实际的实现类型。