E004

调用orsci中的矩阵,演示其中的部分基本功能。

 

// E004
//http://www.orsci.cn
//功能:演示matrix的基本操作

#include "stdafx.h"
#include <iostream>
#include <vector>
#include <string>

using namespace std;

#include "orsciVM.h"
using namespace orsci; //orsci包的命名空间。

int _tmain(int argc, _TCHAR* argv[])
{
mdouble a; //浮点类型的矩阵
a = "[1,2,12,8; 4,7,16, 2; 5,0,8,9]";

cout << "矩阵..." << endl;
cout << a << endl;

cout << "最小值..." << endl;
cout << vmt::minv(a, 0) << endl;
cout << vmt::minv(a, 1) << endl;
cout << "最大值..." << endl;
cout << vmt::maxv(a, 0) << endl;
cout << vmt::maxv(a, 1) << endl;
cout << "求和..." << endl;
cout << vmt::sum(a, 0) << endl;
cout << vmt::sum(a, 1) << endl;
cout << "均值..." << endl;
cout << vmt::mean(a, 0) << endl;
cout << vmt::mean(a, 1) << endl;
cout << "样本方差..." << endl;
cout << vmt::var(a, 0) << endl;
cout << vmt::var(a, 1) << endl;
cout << "总体方差..." << endl;
cout << vmt::var_pop(a, 0) << endl;
cout << vmt::var_pop(a, 1) << endl;
cout << "样本标准差..." << endl;
cout << vmt::stddev(a, 0) << endl;
cout << vmt::stddev(a, 1) << endl;
cout << "总体标准差..." << endl;
cout << vmt::stddev_pop(a, 0) << endl;
cout << vmt::stddev_pop(a, 1) << endl;
cout << "中位数..." << endl;
cout << vmt::median(a, 0) << endl;
cout << vmt::median(a, 1) << endl;

cout << "原矩阵..." << endl;
cout << a << endl;

cout << "矩阵第1行(注:0开始索引)..." << endl;
cout << a.Row(1) << endl;

cout << "矩阵列赋值..." << endl;
a.Col(2).assign("10:12");
cout << a << endl;

cout << "矩阵部分视图..." << endl;
cout << a.view("0, 1", "1:3") << endl; //重新按照行和列映射
cout << a.view("1:2", "2,1, 0") << endl;

cout << "矩阵转置..." << endl;
cout << a.T() << endl;

cout << "矩阵伪逆矩阵..." << endl;
cout << vmt::pinv(a) << endl;
cout << "a * pinv(a) = " << a * vmt::pinv(a) << endl;
cout << "pinv(a) * a = " << vmt::pinv(a) * a << endl;

cout << "矩阵乘法z = a * a.T()..." << endl;
mdouble z = a * a.T();
cout << z << endl;

cout << "逆矩阵z(-1)..." << endl;
cout << vmt::inv(z) << endl;

cout << "矩阵z与其逆矩阵(-1)的乘积..." << endl;
cout << z * vmt::inv(z) << endl;

cout << "Press any key to continue...";
char pp;
cin >> pp;
return 0;
}

输出

矩阵...
rowCount = 3 colCount = 4
1 2 12 8
4 7 16 2
5 0 8 9

最小值...
1 0 8 2
1 2 0
最大值...
5 7 16 9
12 16 9
求和...
10 9 36 19
23 29 22
均值...
3.33333 3 12 6.33333
5.75 7.25 5.5
样本方差...
4.33333 13 16 14.3333
26.9167 38.25 16.3333
总体方差...
2.88889 8.66667 10.6667 9.55556
20.1875 28.6875 12.25
样本标准差...
2.08167 3.60555 4 3.78594
5.18813 6.18466 4.04145
总体标准差...
1.69967 2.94392 3.26599 3.09121
4.49305 5.35607 3.5
中位数...
4 2 12 8
1.5 6 8
原矩阵...
rowCount = 3 colCount = 4
1 0 8 2
4 2 12 8
5 7 16 9

矩阵第1行(注:0开始索引)...
4 2 12 8
矩阵列赋值...
rowCount = 3 colCount = 4
1 0 10 2
4 2 11 8
5 7 12 9

矩阵部分视图...
rowCount = 2 colCount = 3
0 10 2
2 11 8

rowCount = 2 colCount = 3
11 2 4
12 7 5

矩阵转置...
rowCount = 4 colCount = 3
1 4 5
0 2 7
10 11 12
2 8 9

矩阵伪逆矩阵...
rowCount = 4 colCount = 3
-0.0713525 0.0754807 -0.00923411
0.0185008 -0.248865 0.212656
0.139207 -0.0516458 0.0146659
-0.160359 0.220489 -0.0687127

a * pinv(a) = rowCount = 3 colCount = 3
1 -4.44089e-016 -2.498e-016
-4.44089e-016 1 -9.99201e-016
-6.66134e-016 4.44089e-016 1

pinv(a) * a = rowCount = 4 colCount = 4
0.1844 0.0863227 0.00595329 0.378034
0.0863227 0.990864 -0.000630092 -0.0400109
0.00595329 -0.000630092 0.999957 -0.00275937
0.378034 -0.0400109 -0.00275937 0.82478

矩阵乘法z = a * a.T()...
rowCount = 3 colCount = 3
105 130 143
130 205 238
143 238 299

逆矩阵z(-1)...
rowCount = 3 colCount = 3
0.0505269 -0.0525367 0.0176534
-0.0525367 0.118914 -0.0695274
0.0176534 -0.0695274 0.0502444

矩阵z与其逆矩阵(-1)的乘积...
rowCount = 3 colCount = 3
1 1.77636e-015 0
-8.88178e-016 1 1.77636e-015
-1.77636e-015 3.55271e-015 1

Press any key to continue...

书籍 姜维. 《数据分析与数据挖掘》、《文本分析与文本挖掘》
软件 orsci-art开发包(C++语言)。