Matlab并行
在matlab里手写循环的效率是很低的,为提高效率,应该尽可能减少循环操作。把循环写成矩阵运算的形式,因为matlab的函数都是支持矩阵输入的。
在新版的matlab里有一个新特性非常值得学习,即cellfun,arrayfun等。有时候循环很难写成矩阵的形式,这个时候就需要用到cellfun。
cellfun
cellfun对每个cell依次应用指定的函数,可以使得代码更加简洁。假设我们现在有一个cell数组imglist,其中每个cell都是一个图片路径:
imglist{1}='/home/cwl/1.jpg';
imglist{2}='/home/cwl/2.jpg';
现在我们要在imglist中找到图片名为‘1.jpg’的图片,可以这样写
I = cell2mat(cellfun(@(x) ~isempty(strfind(x, '1.jpg')) , imglist,...
'UniformOutput', false));
idx = find(I==1);
im_dir = imglist(idx);
这样,避免了写循环。
当然cellfun中的函数除了自定义函数,还可以使用内建函数。
[nrows, ncols] = cellfun(@size, C)