我正在使用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
上操作的方法(例如Conjugate
和PointwiseMultiply
)的返回值无法分配给Vector
?
答案 0 :(得分:1)
类型层次结构:Vector<T> <- Complex.Vector <- Complex.DenseVector
.Net在覆盖方法时不支持对返回类型(协方差)进行专门化,因此我们在技术上无法修改Conjugate
以在派生类型中返回Complex.Vector
甚至Complex.DenseVector
。
一般来说,我们建议在字段和方法参数中预期和使用泛型类型(即Vector<Complex>
) - 或者当您打算重用变量时。在Math.NET Numerics v3中,这已经过简化,因此几乎不需要使用实际的实现类型。