使用 python 实现深度学习时, python 中的 NumPy 库高效易用,令人惊艳。但因为刚入门 python ,过于精简的语法反而让我感到不适应,所以想着 C/C++ 是否也存在这样的矩阵处理库,答案是肯定的。尽管如此,还是总想着自己模仿着使用 C++ 写一个矩阵工具,所以就有了这篇文章。 ps:如果真的想要使用 C++ 进行科学计算,还是得使用正儿八经的处理库。
开发工具:Dev-C++ 5.11
使用方法: 直接包含头文件 Matrix.h
接口文档:
类成员函数原型 | 函数使用说明 |
---|---|
Matrix(int column) | 定义一个长度为 column 的一维矩阵 |
Matrix(int row, int column) | 定义一个行为 row,列为 column 的二维矩阵 |
static double Min(Matrix &mat) | 求一个矩阵对象中的所有元素的最小值 |
static double Max(Matrix &mat) | 求一个矩阵对象中的所有元素的最大值 |
static double Sum(Matrix &mat) | 求一个矩阵对象中的所有元素的和 |
static Matrix Exp(Matrix &mat) | 分别求一个矩阵对象中的所有元素的对数并以此创建一个矩阵 |
void setByArray(TT array) | 模板函数,使用二维数组 array 设置矩阵的值 |
void setByArray(double* array) | 使用传入的一维数组 array 设置矩阵的值 |
Matrix get_add_with(Matrix &mat) | 计算当前矩阵对象与矩阵对象 mat 的加法运算结果并返回结果矩阵,当前矩阵不受影响 |
Matrix get_sub_with(Matrix &mat) | 计算当前矩阵对象与矩阵对象 mat 的减法运算结果并返回结果矩阵,当前矩阵不受影响 |
Matrix get_mul_with(Matrix &mat) | 计算当前矩阵对象与矩阵对象 mat 的乘法运算结果并返回结果矩阵,当前矩阵不受影响 |
Matrix get_mul_with(double coef) | 计算当前矩阵对象与数值 coef 的乘法运算结果并返回结果矩阵,当前矩阵不受影响 |
double at(int column) | 返回矩阵对象中对应下标的元素。矩阵为一维时使用,否则抛出异常 |
double at(int row, int column) | 返回矩阵对象中对应下标的元素。 |
void input() | 从键盘输入矩阵的值 |
void shape() | 查看矩阵形状(输出矩阵的行和列) |
void shape(string matrixName) | 查看矩阵形状(输出矩阵的行和列),可自定义输出标识 |
void print() | 打印矩阵(输出矩阵中所有元素的值) |
print(string matrixName) | 打印矩阵(输出矩阵中所有元素的值),可自定义输出标识 |
全局函数原型 | 函数使用说明 |
---|---|
Matrix to_matrix(TT array, int row, int column) | 模板函数,将一个二维数组转化为矩阵对象 |
Matrix to_matrix(double* array, int column) | 将一个一维数组转化为矩阵对象 |
支持的运算符操作 | 运算符作用说明 |
---|---|
- | 取负运算符,将矩阵中的所有元素取为相反数 |
+ | 计算矩阵的加法运算 |
- | 计算矩阵的减法运算 |
* | 计算矩阵的乘法运算 |
== | 判断两个矩阵是否相等 |
!= | 判断两个矩阵是否不相等 |
>> | 从键盘输入一个矩阵 |
<< | 输出一个矩阵 |
需要注意: 1)Matrix 类只支持传入 double 类型的数组数据。 2)在设置矩阵的行和列时,确保与将要接收的数组保持一致。
程序示例:
#include <iostream>
#include "Matrix.h" //包含 Matrix 类所在的头文件
using namespace std;
int main() {
double a[3] = {1, 2, 3};
double b[3][3] = {{3, 2, 1}, {3, 2, 1}, {3, 2, 1}};
Matrix A(3); //定义一个长度为 3 的一维矩阵
A.setByArray(a); //调用类的 setByArray 将一维数组转化为矩阵
Matrix B = to_matrix(b, 3, 3);//使用全局函数 to_matrix 将一个二维数组转化为一个二维矩阵
Matrix res = A * B; //计算矩阵 A 和 B 的乘积并用矩阵对象 res 接收结果
A.print(); //打印矩阵 A 的值
cout << endl;
B.print("B"); //打印矩阵 B 的值,设置了输出标识
cout << endl;
res.shape("res");//输出矩阵 res 的形状,设置了输出标识
cout << res; //输出接收乘积结果的矩阵
return 0;
}
运行效果:
项目源码:
github 地址 https://github.com/superman016/code016/tree/master/MatrixTool