这段时间看了一些大型的matlab工程文件(如:faster r-cnn),对于工程中经常要用到的一些函数进行一个总结。
1、路径问题。
这主要涵括文件路径的包含和组合。
curdir = fileparts(mfilename('fullpath'));
addpath(genpath(fullfile(curdir, 'utils')));
mkdir_if_missing(fullfile(curdir, 'utils'));
caffe_path = fullfile(curdir, 'external', 'caffe', 'matlab');
if exist(caffe_path, 'dir') == 0
error('matcaffe is missing from external/caffe/matlab; See README.md');
end
我们经常需要引用不同文件夹下的文件或是函数。
mfilename 表示正在运行的函数的路径
fileparts 则返回文件上层的文件夹路径
fullfile 则返回组合文件的全路径
genpath 递归的产生该文件夹下的所有文件的路径
addpath 路径加入到函数或文件搜索的范围内
exist 查看路径是否存在
mkdir_if_missing 如果不存在就创建对应的文件夹
dirpath = '/home/Deeplearning';
filepath = [dirpath, '/%s.txt'];
for i=1:10
filepath_real = sprintf(filepath, num2str(i));
end
这时路径组合中经常出现的情况
用[]拼接通用路径,具体情况时再加入需要改动的部分,需改动的部分在拼接通用路径时预留
2、查找和排序
[B,I] = sort(A,mode,dim)
A为输入矩阵或向量,mode为排序的模式,升序还是降序,dim表示按第几维进行排序;B为排序后的矩阵或向量,I为排序后的各元素的序号。
X = [3 2 0; -5 0 7; 0 0 1]
[row,col,v] = find(X>1)
X>1为条件,即矩阵X中元素大小比1大的元素,row,col, v分别为返回的元素的位置横、纵坐标、元素本身。
3、随机过程与函数
randi ,random等
4、维度转换
A = [1 2; 3 4]; permute(A,[2 1])
ans =
1 3
2 4
squeeze移除掉多余的某一纬度
Create a 2-by-1-by-3 array and remove the singleton column dimension to form a 2-by-3 matrix.
y = rand(2,1,3)
z = squeeze(y)
y(:,:,1) =
0.8147
0.9058
y(:,:,2) =
0.1270
0.9134
y(:,:,3) =
0.6324
0.0975
z =
0.8147 0.1270 0.6324
0.9058 0.9134 0.0975
5、画图
plot , subplot, figure, meshgrid等
对于如何在一幅图片中的指定位置加入文字和标注可参考我的上一篇博文http://blog.youkuaiyun.com/sunnyxiaohu/article/details/51150430
中 function showboxes(im, boxes, legends, color_conf)的解析。
6、数据的转换
round:
Round to nearest decimal or intege
这个在处理数据时很有用
cell2mat:
num2str, str2num
cat(1,some_cell);
unique();
这些函数在进行各种格式之间的数据转换用的很多,可以自行查阅文档。
matlab中经常强调向量化编程,这样能加快运行的速度。那么对于array或者cell,我们怎样尽量的少使用for循环而用向量化编程呢?
A = randi(10,4,2)%假设你有