矩阵

矩阵是由数值按照规则排列成的矩形数组。本小节介绍矩阵的创建方式与使用示例,以及矩阵的常用接口。

创建矩阵

使用<Util.h>中提供的工具方法来创建,方法声明如下:

static Vector* createMatrix(DATA_TYPE type, int cols, int rows, int colCapacity, int extraParam = 0, void* data = 0, bool containNull = false);

参数:

  • type:表示矩阵中存储元素的类型,如 DT_INT,DT_DATE 等。
  • cols:表示矩阵的列数。
  • rows:表示矩阵的行数。
  • colCapacity:表示预留可以支持的 colCapacity 列数的空间。
  • extraParam:在创建 Decimal 相关类型的矩阵时使用,该参数可用来传入 Decimal 的 scale。
  • data:若已提前分配好可存放 cols * rows 个元素的内存,则可由该参数传入。用户不需要主动去释放这段内存,矩阵析构时会通过 delete[]自动释放。
  • containNull:若传入由用户申请的内存 data,则该参数表示 data 内存中前cols * rows个元素是否包含空值。true 表示包含,false 表示不包含。

使用示例如下:

int* pData = new int[9]{1, 2, 3, 4, 5, 6, 7, 8, 9}; 
ConstantSP matrix = Util::createMatrix(DT_INT, 3, 3, 9, 0, pData); 
std::cout << matrix->getString() << std::endl;

输出如下所示:

#0 #1 #2
-- -- --
1  4  7 
2  5  8 
3  6  9 

常用接口

矩阵的常用接口如下:

ConstantSP getRow(INDEX index) const;                           //获取矩阵第index行(index从0开始),返回一个Vector
ConstantSP getColumn(INDEX index) const;                        //获取矩阵第index列(index从0开始),返回一个Vector
ConstantSP get(INDEX column, INDEX row) const;                  //获取矩阵第column列,第row行的元素,返回一个Scalar
bool set(INDEX column, INDEX row, const ConstantSP& value);     //设置矩阵第column列,第row行的元素为value

使用示例如下:

std::cout << matrix->getRow(1)->getString() << std::endl;               //[2, 5, 8]
std::cout << matrix->getColumn(1)->getString() << std::endl;            //[4, 5, 6]
std::cout << matrix->get(2, 2)->getString() << std::endl;               //9
matrix->set(0, 0, new Int(100));              //将第一行第一列的元素设置为100