Extract Matrix features
文件与目录的含义为:
doc/
:该目录下包括一系列文件features.pdf
:记录了需要提取的特征assignment-vs-move-assignment.png
:对比是否添加move
函数的效果
sparsemat.cpp sparsemat.h
:定义基础数据结构的程序,包括稀疏矩阵基类,派生类COO
和派生类CSR
tensor.cpp tensor.h
:定义稠密矩阵的相关类,目前只定义了向量类Vec
,以后可以派生出矩阵类,以及更高维的张量类features.cpp features.h
:基于稀疏矩阵类,定义的特征提取类程序base.h
:定义了全局宏,目前只是用INT
和DOUBLE
来分别代替int
和double
,后续可能会加上一些公用函数main.cpp
:程序的入口,进行具体操作test.cpp
:测试部分功能的程序Makefile
:编译的命令,使用make main
即可编译出可执行程序json.hpp
:实现json
的相关程序,具体介绍在下面matrix.dat
:小规模的COO
矩阵数据,用于测试main_features.json
:运行./main
生成的json
文件
- 对于类名与函数名,使用驼峰命名法;对于变量名,使用下划线连接。比如,函数名为
PrintCSRByRow()
,变量名为input_file
- 特别地,对于特征提取的函数,因为要加上编号,所以可以通过下划线连接。比如程序中包括的一个示例程序
Features_1_1_Nrows()
,其中编号对应features.pdf
文件中的特征1.1
,后面的Nrows
表示特征的名称 - 缩进统一使用
tab
,四个空格 - 括号的使用,尽量对齐。比如
for(...)
{
i++
}
不要使用下面这种方式
for(...){
i++
}
- 在头文件
*.h
中进行函数声明,在*.cpp
中进行函数定义,尽量不要在头文件中进行函数实现
程序的主体已经写好,剩下的工作主要是:根据函数Features_1_1_Nrows()
写法,基于CSR
矩阵结构,编写出提取其它特征的函数。该函数的相关内容位于features.cpp features.h
文件中。
考虑到STL
中map
和unordered_map
都没有输出到文件的功能,所以使用标准json
库。可供选择的库有很多,例如:
rapidjson
:速度最快,但是接口难用,没必要选择它;jsoncpp
:需要单独编译成库,再链接,麻烦;nlohmann/json
:只需一个hpp
文件,接口设计的比较易用,整体评价也不错。
对性能的要求不高,越易用越好,所以最终选择nlohmann/json
。用法很简单,只需要在官方网站 github:nlohmann/json 中下载json.hpp
文件到本地,放在本工程目录下,然后在相关文件中加上
#include "json.hpp"
即可。
以上内容只是介绍,程序已经配置好了,不用再关心这部分内容。