本文主要通过示例代码,讲述原生C#数学函数库,如何编写代码以访问底层数据和应用函数。
访问底层数据
针对需要原生和遗留代码接口的应用程序,NMath向量和矩阵的类可用作一个指针来获取底层数据。这些类拥有一个叫DataBlock的属性,这个属性可以返回<Type>DataBlock对象。<Type>DataBlock包括一个数组和一个偏移量,让你可以通过其获取底层数据,例如:
1 2 3 4 5 6 7 8 | DoubleVector v = new DoubleVector( 12, 0, 1 ); DoubleDataBlock dataBlock = v.DataBlock; unsafe { double *ptr = &(dataBlock.Data[dataBlock.Offset]); // Do with *ptr something here } |
应用函数
NMath提供了方便的方法把一元和二元函数应用到向量或矩阵对象的元素中。通过Apply()返回一个新的对象,其内容是给定函数应用于矩阵或向量元素的结果。Transform()能够修改矩阵或向量对象中应用的函数元素。根据这个原理,我们可以来看以下例子。假设MyFunc是一个函数:
1 2 3 4 5 6 7 8 9 | // Construct a delegate for MyFunc Func< double , double > MyFuncDelegate = new Func< double , double >( MyFunc ); // Construct a new vector whose values are the result of applying // MyFunc to the values in vector v. v remains unchanged. DoubleVector w = v.Apply( MyFuncDelegate ); // Transform the contents of v. v.Transform( MyFuncDelegate ); v == w; // true! |
NMath在NMathFunctions类提供了许多常用的数学函数。接下来会详细介绍,敬请关注。