原創|其它|編輯:郝浩|2012-12-17 16:50:01.000|閱讀 403 次
概述: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@fc6vip.cn
文章轉載自:慧都控件網