1.引言
最近在看图像AI相关的知识,在此记录一个自己思考的代码用例。
关于矩阵的应用在AI中应用还是很广泛,尤其是深度学习的特征值这块中。
这里先简单记录上自己简单的基础矩阵算法的类,后续学习中会不断丰富这个类。
参考opencv3.4.0源码中libjasper模块中的jas_seq.c本例中增加了加减乘运算,
缩减和扩充了一些自己的理解
2.矩阵基本运算
我就是典型的:上课不听讲,考试混及格。书到用时方恨少!!
看到的同学们一定要好好的认真的学习大学知识,我现在才觉得大学学习的知识真的太有用了。
当然忘记了或者没学过的可以像我一样参考以下的视频进行学习
bilibili考研课程《线性代数》 https://www.bilibili.com/video/BV1aW411Q7x1?p=9
2.1 矩阵加减法



主要记住以下几个点:
1.同型矩阵指的是两个矩阵的行数和列数相等。
2.两矩阵对应元素相加减(前提必须是同型矩阵)
3.矩阵相乘满足:中间相等取两头
3.代码实现
对于矩阵的赋值都采用了调用类创建矩阵时赋值或不赋值(默认参数)处理,
和接口设置所有元素为一个数,具体见如下代码。
matrix.h 矩阵类的定义
/*******************************
* file: matrix.h
* author: hehl
* time: 2021/7/9
*******************************/
#pragma once
#include <iostream>
#include <vector>
#include <string.h>
#include <stdarg.h>
#include <stdio.h>
using namespace std;
typedef int INT;
// 基本的二维矩阵结构体
typedef struct matix_s
{
INT s_nRowsNums; // 矩阵的行数
INT s_nColsNums; // 矩阵的列数
INT** s_pRows; // 指向矩阵每行开头的指针的指针(保存s_pData中每行的指针数组)
INT s_nRowsSize; // 行数组分配大小
INT* s_pData; // 矩阵的数据
INT s_nDataSize; // 数据数组分配大小
matix_s()
{
s_nRowsNums = 0;
s_nColsNums = 0;
s_pRows = nullptr;
s_nRowsSize = 0;
s_pData = nullptr;
s_nDataSize = 0;
}
} matrix_t;
class Matrix
{
public:
// 单例
static Matrix* GetInstance();
// 创建矩阵,返回创建成功后矩阵的指针,失败返回nullptr 可以直接输入对应参数进行创建.仅仅用于测试
matrix_t* matrix_create(INT nRows, INT nCols, bool bSet = false, ...);
// 释放矩阵,释放内存
void matrix_destroy(matrix_t* pMatrix_t);
// 将矩阵的所有元素设置为指定值
void matrix_setall(matrix_t* pMatrix_t, INT nValue);
// 打印矩阵中的值
void matrix_printf(matrix_t* pMatrix_t);
// 两个矩阵相加
bool two_matrix_add(matrix_t* pMatSrcA, matrix_t* pMatSrcB, matrix_t* pMatDes);
// 两个矩阵相减
bool two_matrix_subtrac(matrix_t* pMatSrcA, matrix_t* pMatSrcB, matrix_t* pMatDes);
// 两个矩阵相乘
bool two_matrix_multiply(matrix_t* pMatSrcA, matrix_t* pMatSrcB, matrix_t* pMatDes);
// 当前有多少未释放内存的矩阵
INT get_matix_objects_nums(void);
// 释放当前所有未释放矩阵的内存
void destory_all_matrix_objects(void);
private:
// 构造函数,用于初始化
Matrix();
// 析构函数,用于释放内存
~Matrix();
// 获取矩阵行数
INT matrix_getrows(matrix_t* pMatrix_t);
// 获取矩阵列数
INT matrix_getcols(matrix_t* pMatrix_t);
// 获取矩阵数据大小
INT matrix_get_data_size(matrix_t* pMatrix_t);
private:
vector<matrix_t*> m_vpMatrix_t;
static Matrix* m_pInstance;
};
matrix.cpp 具体实现矩阵类
/*******************************
* file: matrix.cpp
* author: hehl
* time: 2021/7/9
*******************************/
#include "matrix.h"
Matrix* Matrix::m_pInstance = new Matrix();
Matrix* Matrix::GetInstance()
{
if (m_pInstance == nullptr)
{
m_pInstance = new Matrix();
}

这篇博客介绍了如何基于C++实现一个简单的矩阵类,包括矩阵的创建、销毁、赋值、加减乘运算。作者强调了大学基础知识的重要性,并提供了线性代数学习资源。代码实现中包含了矩阵的内存管理和错误检查,以及矩阵运算的逻辑。测试部分展示了加法和乘法的使用示例。
最低0.47元/天 解锁文章
5481

被折叠的 条评论
为什么被折叠?



