特性
内存分配本质是基于一维空间的,所以在单个矩阵在空间上是连续的。
使用见注释
Matrix m1(2,2);
m1[0][0] = 1;
m1[0][1] = 2;
m1[1][0] = 1;
m1[1][0] = 2;
Matrix m2 = m1;
// 加法
Matrix m3 = m1 + m2;
// 减法
Matrix m4 = m1 - m2;
// 乘法
Matrix m5 = m1 * m2;
// 对应元素相乘
Matrix m6 = m1 ^ m2;
// 加一个常数
Matrix m7 = m1 + 2;
// 减一个常数
Matrix m8 = m1 - 2;
// 乘一个常数
Matrix m8 = m1 * 2;
// 转置
Matrix m9 = m1.T();
// 卷积
Matrix m10(5,5);
m10.convolution(m1);
// 取出一个小矩阵
Matrix m11 = m10.split(0,0,2,2);
#include <string.h>
#include <iostream>
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#define random(x) (rand()/x)
using namespace std;
class Matrix
{
// 数据存储用到
class matrix_array
{
public:
matrix_array()
{
data_buffer = NULL;
data_index = -1;
}
matrix_array(const int arow, const int acol)
{
data_buffer = new float[arow * acol]{ 0 };
data_index = 0;
}
// 此函数中分配内存
void init_array(const int arow, const int acol, bool randomValue = false)
{
if (data_buffer)
{
delete[]data_buffer;
data_buffer = NULL;
}
data_index = 0;
if (randomValue)
{
data_buffer = new float[arow * acol];
srand((int)time(0));
for (int i = 0; i < arow * acol; i++)
data_buffer[i] = rand()/ float(RAND_MAX);
}
else {
data_buffer = new float[arow * acol]{ 0 };
}
}
void set_data_index(int _index)
{
data_index = _index;
}
float* get_data_point()
{
return data_buffer;
}
float& operator[](int _index)
{
return dat