作者:gnuhpc
出處:http://www.cnblogs.com/gnuhpc/
做畢設時碰到了最小二乘法的直線擬合問題,發覺C++里有以下這么幾個類在做這件事情、以及后續處理時挺不錯的,其實用OpenCV的數據結構和方法也可以進行,稍后研究一下。
valarray 類用法
1. apply 將 valarray 數組的每一個值都用 apply 所接受到的函數進行計算
2. cshift 將 valarray 數組的數據進行循環移動,參數為正者左移為負就右移
3. max 返回 valarray 數組的最大值
4. min 返回 valarray 數組的最小值
5. resize 重新設置 valarray 數組大小,並對其進行初始化
6. shift 將 valarray 數組移動,參數為正者左移,為負者右移,移動后由 0 填充剩余位
7. size 得到數組的大小
8. sum 數組求和
構造函數
valarray( );
explicit valarray(size _ t _Count );
valarray( const Type& _Val , size _ t _Count );
valarray( const Type* _Ptr , size _ t _Count );
valarray( const slice _ array<Type>& _SliceArray );
valarray( const gslice _ array<Type>& _GsliceArray );
valarray( const mask _ array<Type>& _MaskArray );
valarray( const indirect _ array<Type>& _IndArray );
slice 類用法
該類主要配合 valarray 類使用,可以從 valarray 中提取子數組
slice( );
slice( size _ t _StartIndex ,// 截取數組的開始位置
const valarray<size _ t> _Len , // 子數組的最大長度
const valarray<size _ t> _Stride// 相隔多少個元素選中一個
);
用法:
int main( )
{
using namespace std;
int i;
valarray<int> va ( 20 ), vaResult;
for ( i = 0 ; i < 20 ; i+=1 )
va [ i ] = 2 * (i + 1 );
cout << "The operand valarray va is:/n( ";
for ( i = 0 ; i < 20 ; i++ )
cout << va [ i ] << " ";
cout << ")." << endl;
slice vaSlice ( 1 , 7 , 3 );
vaResult = va [ vaSlice ];
cout << "/nThe slice of valarray va is vaResult:"
<< "/nva[slice( 1, 7, 3)] = ( ";
for ( i = 0 ; i < 7 ; i++ )
cout << vaResult [ i ] << " ";
cout << ")." << endl;
}
輸出結果:
The operand valarray va is:
( 2 4 6 8 10 12 14 16 18 20 22 24 26 28 30 32 34 36 38 40 ).
The slice of valarray va is vaResult:
va[slice( 1, 7, 3)] = ( 4 10 16 22 28 34 40 )
Gslice 類用法
Gslice 類的用法和slice 基本相同,只是它截取的是循環子串,當母串進行一次提取后的字串元素數目達不到要求時,gslice 會將提取后的母串繼續組合進行提取直到滿足要求或者母串被提取完了
公共函數( 對數組的操作)
1.abs 對數組的每一個元素取絕對值
2.acos 返回每個元素的反余弦值
3.asin 返回每個元素的反正弦值
4.atan 返回每個元素的正切值
5.atan2 笛卡爾正切值
6.cos 余弦值
7.cosh 雙曲線余弦值
8.exp 返回自然指數E^x
9.log 返回自然對數
10.log10 返回以10 為底的返回自然對數
11.exp 返回x^y
12.sin 正弦值
13.sinh 雙曲線正弦值
14.sqrt 開方
15.tan 正切值
16.tanh 反正切值