如何理解matlab函数

发布时间:2021-10-14 10:19:29 作者:柒染
来源:亿速云 阅读:177

如何理解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) (2)max(a,b) (3)max(a,[],dim) (4)[C,I]=max(a) (5)[C,I]=max(a,[],dim) 
二:举例说明函数意思 
(1)max(a) 
如果a是一个矩阵,比如a=[1,2,3;4,5,6],max(a)的意思就是找出矩阵每列的最大值, 本例中:max(a)=[4,5,6] 
(2)max(a,b) 
如果a和b都是大于1维的矩阵,那么要求a和b的行列的维数都要相等,函数的结果是比较a和b中每个元素的大小,比如: 
a=[1,2,3;4,5,6]      b=[4,5,6;7,8,3] max(a,b)=[4,5,6;7,8,6] 另外,如果a和b中至少有一个是常数,也是可以的。比如:       a=[1,2,3;4,5,6]         b=3        c=5 
      max(a,b)=[3,3,3;4,5,6]  相信大家看了例子都明白了函数的意思了吧       max(b,c)=5 
(3)max(a,[],dim) 
这个函数的意思是针对于2维矩阵的,dim是英文字母dimension的缩写,意思是维数。 当dim=1时,比较的a矩阵的行,也就是和max(a)的效果是一样的;当dim2时,比较的是a矩阵的行。下面举个例子: 
a=[1,2,3;4,5,6]       max(a)=max(a,[],1)=[4,5,6]    比较的第一行和第二行的值                    max(a,[],2)=[3,6]
(4)[C,I]=max(a) 
C表示的是矩阵a每列的最大值,I表示的是每个最大值对应的下标: 下面举例说明: 
还是刚才那个例子:a=[1,2,3;4,5,6]          [C,I]=max(a) 
结果显示的是C=[4,5,6]       I=[2,2,2]   返回的是最大值对应的行号。 
(5)[C,I]=max(a,[],dim) 
同理:如果dim=1时,其结果和[c,i]=max(a)是一样的。 当dim=2时,同样上面的矩阵a,我们运行一下: 
[c,i]=max(a,[],2)     结果是:c=[3,6]   i=[3,3]    i返回的是矩阵a的列号。

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)
  A为输入图像,B为填充后的图像,padsize给出了给出了填充的行数和列数,通常用[r c]来表示。padval和direction分别表示填充方法和方向。它们的具体值和描述如下:
  padval:'symmetric'表示图像大小通过围绕边界进行镜像反射来扩展;
       
'replicate'表示图像大小通过复制外边界中的值来扩展;
       
'circular'图像大小通过将图像看成是一个二维周期函数的一个周期来进行扩展。
  direction:'pre'表示在每一维的第一个元素前填充;
        'post'表示在每一维的最后一个元素后填充;
        'both'表示在每一维的第一个元素前和最后一个元素后填充,此项为默认值。
  若参量中不包括direction,则默认值为'both'。若参量中不包含padval,则默认用零来填充。若参量中不包括任何参数,则默认填充为零且方向为'both'。在计算结束时,图像会被修剪成原始大小。

[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函数的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注亿速云行业资讯频道,感谢各位的阅读!

推荐阅读:
  1. matlab中size函数用法
  2. matlab中的fprintf函数怎么用

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

上一篇:如何使用CMS支付设置

下一篇:如何解决git分支合并时不慎Fast Forward了的问题

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》