E026

orsci中矩阵行列的复制row_copy、col_copy、移动row_move、col_move、交换row_swap、col_swap、赋值row_assign、col_assign等。可以在同一矩阵中操作,也可以在不同矩阵中操作。例如两个矩阵交换行,要求两个矩阵具有相同的列长度。复制和赋值可以在矩阵和矩阵中进行,也可以在矩阵和向量中进行。特别注意:..._copy函数不负责分配空间,仅是复制,如果目标空间不满足要求,则引发异常。而..._assign首先为目标对象分配空间,然后再复制,因此称作赋值。

 

#include "stdafx.h"

#include "orsciJWVCL.h"
#include "orsciVM.h"
using namespace orsci;
using namespace orsci::vmt;


int main()
{
cout << "orsci: view()、submat()与矩阵行列的移动、交换、复制和赋值... http://www.orsci.cn" << endl;
cout << endl;

mdouble x, y;
x.Resize(5, 7);
x.fill(0, 0, 1);
cout << "x = " << endl;
cout << x << endl;
y.Resize(5, 7);
y.fill(0, 100, 1);
cout << "y = " << endl;
cout << y << endl;

cout << "使用view()获取矩阵视图.x.view(\"1, 2\", \"0:3\")=" << endl;
cout << x.view("1, 2", "0:3") << endl;

cout << "使用submat()获取子矩阵.x.submat(dyn(2, 3, 2, 1), \"0:3\")=" << endl;
cout << x.submat(dyn(2, 3, 2, 1), "0:3") << endl;

cout << "矩阵行的移动.z = x; z.row_move(3, 0) = " << endl;
mdouble z = x;
z.row_move(3, 0);
cout << z << endl;

cout << "矩阵行的交换.z = y; z.col_swap(1, 4) = " << endl;
z = y;
z.col_swap(1, 4);
cout << z << endl;

cout << "矩阵的复制: z.row_copy(1, 0) = " << endl;
z.row_copy(1, 0);
cout << z << endl;

cout << "在两个矩阵中交换:z.swap(2, x, 2) = " << endl;
z.row_swap(2, x, 2);
cout << "now z = " << endl;
cout << z << endl;
cout << "now x = " << endl;
cout << x << endl;

rowdouble rr;
z.row_assignTo(3, rr);
cout << "z.row_assignTo(3, rr); rr = " << endl;
cout << rr << endl;

cout << endl;
cout << "说明:row_copy、col_copy、row_swap、col_swap、row_assign、col_assign、row_move、col_move等函数常用。有些函数还可实现两个矩阵中交换、复制等。" << endl;

cout << endl;
cout << "press any key to stop..." << endl;
char pp;
cin >> pp;


return 0;
}

输出

(一)运行结果

orsci: view()、submat()与矩阵行列的移动、交换、复制和赋值... http://www.orsci.cn

x =
rowCount = 5 colCount = 7
0 5 10 15 20 25 30
1 6 11 16 21 26 31
2 7 12 17 22 27 32
3 8 13 18 23 28 33
4 9 14 19 24 29 34

y =
rowCount = 5 colCount = 7
100 105 110 115 120 125 130
101 106 111 116 121 126 131
102 107 112 117 122 127 132
103 108 113 118 123 128 133
104 109 114 119 124 129 134

使用view()获取矩阵视图.x.view("1, 2", "0:3")=
rowCount = 2 colCount = 4
1 6 11 16
2 7 12 17

使用submat()获取子矩阵.x.submat(dyn(2, 3, 2, 1), "0:3")=
rowCount = 4 colCount = 4
2 7 12 17
3 8 13 18
2 7 12 17
1 6 11 16

矩阵行的移动.z = x; z.row_move(3, 0) =
rowCount = 5 colCount = 7
1 6 11 16 21 26 31
2 7 12 17 22 27 32
3 8 13 18 23 28 33
0 5 10 15 20 25 30
4 9 14 19 24 29 34

矩阵行的交换.z = y; z.col_swap(1, 4) =
rowCount = 5 colCount = 7
100 120 110 115 105 125 130
101 121 111 116 106 126 131
102 122 112 117 107 127 132
103 123 113 118 108 128 133
104 124 114 119 109 129 134

矩阵的复制: z.row_copy(1, 0) =
rowCount = 5 colCount = 7
100 120 110 115 105 125 130
100 120 110 115 105 125 130
102 122 112 117 107 127 132
103 123 113 118 108 128 133
104 124 114 119 109 129 134

在两个矩阵中交换:z.swap(2, x, 2) =
now z =
rowCount = 5 colCount = 7
100 120 110 115 105 125 130
100 120 110 115 105 125 130
2 7 12 17 22 27 32
103 123 113 118 108 128 133
104 124 114 119 109 129 134

now x =
rowCount = 5 colCount = 7
0 5 10 15 20 25 30
1 6 11 16 21 26 31
102 122 112 117 107 127 132
3 8 13 18 23 28 33
4 9 14 19 24 29 34

z.row_assignTo(3, rr); rr =
103 123 113 118 108 128 133

说明:row_copy、col_copy、row_swap、col_swap、row_assign、col_assign、row_move、
col_move等函数常用。有些函数还可实现两个矩阵中交换、复制等。

press any key to stop...

(二)说明:

(1)矩阵的行列常见操作:复制、赋值、移动、交换。row_copy、col_copy、row_swap、col_swap、row_assign、col_assign、row_move、 col_move等函数常用。可以实现同一矩阵、两个矩阵或者矩阵与向量之间的操作。

(2)关于向量与矩阵,请参看书籍:姜维. 《数据分析与数据挖掘》、《数据分析与数据挖掘实践》

(6)orsci包支持向量和矩阵计算,可下载配套软件orsci应用。

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