如何理解matlab函数,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。
PadSize函数
贴下 matlab源代码
function [pad_ul, pad_lr] = PadSize(offsets,op_type) if isempty(offsets) pad_ul = zeros(1,2); pad_lr = zeros(1,2); else num_dims = size(offsets{1},2); //求出最大维数 for k = 2:length(offsets) num_dims = max(num_dims, size(offsets{k},2)); end for k = 1:length(offsets) //建立大矩阵 offsets{k} = [offsets{k} zeros(size(offsets{k},1),... num_dims - size(offsets{k},2))]; end pad_ul = zeros(1,num_dims); pad_lr = zeros(1,num_dims); for k = 1:length(offsets) //找出矩阵中的最小值 offsets_k = offsets{k}; if ~isempty(offsets_k) pad_ul = pad_ul + max(0, -min(offsets_k,[],1)); pad_lr = pad_lr + max(0, max(offsets_k,[],1)); end end if strcmp(op_type,'erode') % Swap tmp = pad_ul; pad_ul = pad_lr; pad_lr = tmp; end end
输入:offsets是 1*6 cell
<7x2 double> <5*2 double> <7x2 double> <5*2 double> <5*2 double> <5*2 double>
max(offsets_k,[],1) offsets_k是5*2的矩阵-
2 -2
-1 -1
0 0
1 1
2 2
贴个详细的解释:http://blog.sina.com.cn/s/blog_505018ce0101976j.html
细说MATLAB中的MAX函数
一:MAX函数的几种形式
(1)max(a)
二:举例说明函数意思
(1)max(a)
如果a是一个矩阵,比如a=[1,2,3;4,5,6],max(a)的意思就是找出矩阵每列的最大值,
(2)max(a,b)
如果a和b都是大于1维的矩阵,那么要求a和b的行列的维数都要相等,函数的结果是比较a和b中每个元素的大小,比如:
a=[1,2,3;4,5,6]
(3)max(a,[],dim)
这个函数的意思是针对于2维矩阵的,dim是英文字母dimension的缩写,意思是维数。
a=[1,2,3;4,5,6]
(4)[C,I]=max(a)
C表示的是矩阵a每列的最大值,I表示的是每个最大值对应的下标:
还是刚才那个例子:a=[1,2,3;4,5,6]
结果显示的是C=[4,5,6]
(5)[C,I]=max(a,[],dim)
同理:如果dim=1时,其结果和[c,i]=max(a)是一样的。
[c,i]=max(a,[],2)
ndims()函数
ndims(A)返回结果实际上等于length(size(A))。
通俗一点讲,数组维度就是数组具有的方向。比如普通的二维数组,数组具有行方向和列方向,就是说数组具有两个方向,是一个二维数组。MATLAB中还可以创建三维甚至更高维的数组。
对于空数组、标量和一维数组,MATLAB还是当作普通二维数组对待的,因此它们都至少具有两个维度(至少具有行和列的方向)。特别地,用空白方括号产生的空数组是当作二维数组对待的,但在高维数组中也有空数组的概念,这时候的空数组可以是只在任意一个维度上尺寸等于零的数组,相应地,此时的空数组就具有多个维度了。
MATLAB中计算数组维度可以用函数ndims。
ndims(A)返回结果实际上等于length(size(A))。
【例3-13】数组维度。
解:输入命令后其运行结果如下:
>> B=2
B =
2
>> ndims(B)
ans =
2
>> c=1:5
c =
1 2 3 4 5
>> ndims(c)
ans =
2
通过例3-13可以看到,一般的非多维数组,在MATLAB中都是当作二维数组处理的。
在贴一个函数:链接http://blog.sina.com.cn/s/blog_83057b2401012rxj.html
function :填充图像或填充数组
use:
B = padarray(A,padsize,padval,direction)
padval:'symmetric'表示图像大小通过围绕边界进行镜像反射来扩展;
'replicate'表示图像大小通过复制外边界中的值来扩展;
'circular'图像大小通过将图像看成是一个二维周期函数的一个周期来进行扩展。
[a, method, padSize, padVal, direction] = ParseInputs(varargin{:}); if isempty(a),% treat empty matrix similar for any method if strcmp(direction,'both') sizeB = size(a) + 2*padSize; else sizeB = size(a) + padSize; end b = mkconstarray(class(a), padVal, sizeB); else switch method case 'constant' b = ConstantPad(a, padSize, padVal, direction);//作用是: case 'circular' b = CircularPad(a, padSize, direction); case 'symmetric' b = SymmetricPad(a, padSize, direction); case 'replicate' b = ReplicatePad(a, padSize, direction); end end if (islogical(a)) b = logical(b); end
function b = ConstantPad(a, padSize, padVal, direction)
numDims = numel(padSize);
% Form index vectors to subsasgn input array into output array.
% Also compute the size of the output array.
idx = cell(1,numDims);
sizeB = zeros(1,numDims);
for k = 1:numDims
M = size(a,k);
switch direction
case 'pre'
idx{k} = (1:M) + padSize(k);
sizeB(k) = M + padSize(k);
case 'post'
idx{k} = 1:M;
sizeB(k) = M + padSize(k);
case 'both'
idx{k} = (1:M) + padSize(k);
sizeB(k) = M + 2*padSize(k);
end
end
% Initialize output array with the padding value. Make sure the
% output array is the same type as the input.
b = mkconstarray(class(a), padVal, sizeB);
b(idx{:}) = a;
看完上述内容,你们掌握如何理解matlab函数的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注亿速云行业资讯频道,感谢各位的阅读!
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。