彩票走势图

NMath应用教程:实现向量与矩阵的操作语义

原创|其它|编辑:郝浩|2012-12-17 16:50:01.000|阅读 360 次

概述:NMath采用的数据视图设计模式,它在存储效率和性能上都有一定的优势,如果与切片相结合,数据视图模式还能够提高非常丰富的矩阵和向量操作语义。

# 慧都年终大促·界面/图表报表/文档/IDE等千款热门软控件火热促销中 >>

相关链接:

  NMath采用的数据视图设计模式,将不同数据类型加以区分,对向量和矩阵作为不同的数学对象区别处理。例如,在内存中,一个连续的数组可以被当作一个向量元素对象,同样的这个数组,在一行一行布局后,也可以作为一个矩阵元素对象。在任何给定的时间点,许多不同的对象可能会共享一个给定的数据块。数据视图设计模式在存储效率和性能上都有一定的优势,如果与切片相结合,数据视图模式还能够提高非常丰富的矩阵和向量操作语义。

一般向量和矩阵类

  这个类将NMath中的一般向量和矩阵封装为<Type>Matrix 和<Type>Vector,其中<type>可以是Float,Double,FloatComplex或者DoubleComplex。例如,FloatComplexVector类就表示一个单精度复数向量。矩阵和向量类中的每个类都包含一个数据块,数据块中引用的查看参数值。例如,一个向量类的实例包含的数据块,该数据块里面就包括了引用元素的数目及步幅,或元素之间的步增量。同样,矩阵对象也包含了数据块,数据块中包括了行列的数量,连续的行元素之间的距离和连续的列元素之间的距离。

  所提供的索引需要进行必要的间接引用,例如,v[i]返回的是向量v数据视图的第i个元素的,A[i,j]返回的是矩阵A的数据视图中第i行的元素。

范围和切片

  获得一个特定的数据块的不同视图,最常见的方式是通过切片和范围的索引对象。这些类提供了指定一个拥有固定间距的非负整数的子集的方法。这其实是MATLAB中的冒号运算符。任何整数子集都可以成为矩阵和向量的索引对象。

  范围和切片的差别其实只在于指定的整数子集不同。就切片来说,需要被指定的有起点整数,整数的数量和步幅。例如,创建一个切片指定的整数{2,4,6,8,10},指定2开始,共有5个元素,和步幅为2。

  定义范围时,则需要指定第一个和最后一个整数。因此,如何整数子集{2,4,6,8,10}是用来创建一个范围对象的,那2即为起点,停止点为10,和2的步幅。

  下面是一个例子就是使用切片对象来创建一个新的向量数据视图:

// Create a vector of length 10 containing the integers 1-10:
DoubleVector v = new DoubleVector( 10, 1, 1 ); 
// Construct a new vector, u, that views the first three elements
// of v
Slice first3 = new Slice( 0, 3 );
DoubleVector u = v[first3];

  请注意,DoubleVector索引以接受切片对象来重载,并返回一个新的索引数据视图。

  DoubleVector u的表现形式与一个拥有3个元素(1,2,3)的向量架构一样,如下:

u[0] == 1; // true
u[1] == 2; // true
u[2] == 3; // true
u[3]; //Index out of bounds exception!

  当u中的值改变的时候,u和新构建向量数据视图的区别就会更明显了。用以下代码将v值改变。

u[2] = 99;
v[2] == 99; // true!

  根据以上原理,如果需要沿着矩阵的主对角线递增元素,通过以下代码:

DoubleMatrix A = new DoubleMatrix( 5, 8 );
A.Diagonal()++;

  使用矩阵类中的Diagonal()就可以完成了。

  再次之后,如果需要在不影响其他对象的情况下,再创建一个私有的数据视图,调用DeepenThisCopy()就可以了,如下:

DoubleMatrix A = new DoubleMatrix( 8, 8 );
Range topLeft = new Range( 0, 3 );
// Construct a matrix that views the top left
// corner of A.
DoubleMatrix AtopLeft = A[ topLeft, topLeft ];
// Make a deep copy of this data
AtopLeft.DeepenThisCopy();

  这样,数据视图边和切片想结合,实现了丰富的向量与矩阵的操作语义。


标签:

本站文章除注明转载外,均为本站原创或翻译。欢迎任何形式的转载,但请务必注明出处、不得修改原文相关链接,如果存在内容上的异议请邮件反馈至chenjj@pclwef.cn

文章转载自:慧都控件网

为你推荐

  • 推荐视频
  • 推荐活动
  • 推荐产品
  • 推荐文章
  • 慧都慧问
扫码咨询


添加微信 立即咨询

电话咨询

客服热线
023-68661681

TOP