溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶(hù)服務(wù)條款》

如何理解matlab函數(shù)

發(fā)布時(shí)間:2021-10-14 10:19:29 來(lái)源:億速云 閱讀:167 作者:柒染 欄目:編程語(yǔ)言

如何理解matlab函數(shù),相信很多沒(méi)有經(jīng)驗(yàn)的人對(duì)此束手無(wú)策,為此本文總結(jié)了問(wèn)題出現(xiàn)的原因和解決方法,通過(guò)這篇文章希望你能解決這個(gè)問(wèn)題。

PadSize函數(shù)

貼下 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); //求出最大維數(shù)
    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

貼個(gè)詳細(xì)的解釋?zhuān)篽ttp://blog.sina.com.cn/s/blog_505018ce0101976j.html

細(xì)說(shuō)MATLAB中的MAX函數(shù) 
一:MAX函數(shù)的幾種形式 
(1)max(a) (2)max(a,b) (3)max(a,[],dim) (4)[C,I]=max(a) (5)[C,I]=max(a,[],dim) 
二:舉例說(shuō)明函數(shù)意思 
(1)max(a) 
如果a是一個(gè)矩陣,比如a=[1,2,3;4,5,6],max(a)的意思就是找出矩陣每列的最大值, 本例中:max(a)=[4,5,6] 
(2)max(a,b) 
如果a和b都是大于1維的矩陣,那么要求a和b的行列的維數(shù)都要相等,函數(shù)的結(jié)果是比較a和b中每個(gè)元素的大小,比如: 
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中至少有一個(gè)是常數(shù),也是可以的。比如:       a=[1,2,3;4,5,6]         b=3        c=5 
      max(a,b)=[3,3,3;4,5,6]  相信大家看了例子都明白了函數(shù)的意思了吧       max(b,c)=5 
(3)max(a,[],dim) 
這個(gè)函數(shù)的意思是針對(duì)于2維矩陣的,dim是英文字母dimension的縮寫(xiě),意思是維數(shù)。 當(dāng)dim=1時(shí),比較的a矩陣的行,也就是和max(a)的效果是一樣的;當(dāng)dim2時(shí),比較的是a矩陣的行。下面舉個(gè)例子: 
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表示的是每個(gè)最大值對(duì)應(yīng)的下標(biāo): 下面舉例說(shuō)明: 
還是剛才那個(gè)例子:a=[1,2,3;4,5,6]          [C,I]=max(a) 
結(jié)果顯示的是C=[4,5,6]       I=[2,2,2]   返回的是最大值對(duì)應(yīng)的行號(hào)。 
(5)[C,I]=max(a,[],dim) 
同理:如果dim=1時(shí),其結(jié)果和[c,i]=max(a)是一樣的。 當(dāng)dim=2時(shí),同樣上面的矩陣a,我們運(yùn)行一下: 
[c,i]=max(a,[],2)     結(jié)果是:c=[3,6]   i=[3,3]    i返回的是矩陣a的列號(hào)。

ndims()函數(shù)

ndims(A)返回結(jié)果實(shí)際上等于length(size(A))。

通俗一點(diǎn)講,數(shù)組維度就是數(shù)組具有的方向。比如普通的二維數(shù)組,數(shù)組具有行方向和列方向,就是說(shuō)數(shù)組具有兩個(gè)方向,是一個(gè)二維數(shù)組。MATLAB中還可以創(chuàng)建三維甚至更高維的數(shù)組。

對(duì)于空數(shù)組、標(biāo)量和一維數(shù)組,MATLAB還是當(dāng)作普通二維數(shù)組對(duì)待的,因此它們都至少具有兩個(gè)維度(至少具有行和列的方向)。特別地,用空白方括號(hào)產(chǎn)生的空數(shù)組是當(dāng)作二維數(shù)組對(duì)待的,但在高維數(shù)組中也有空數(shù)組的概念,這時(shí)候的空數(shù)組可以是只在任意一個(gè)維度上尺寸等于零的數(shù)組,相應(yīng)地,此時(shí)的空數(shù)組就具有多個(gè)維度了。

MATLAB中計(jì)算數(shù)組維度可以用函數(shù)ndims。

ndims(A)返回結(jié)果實(shí)際上等于length(size(A))。

【例3-13】數(shù)組維度。

解:輸入命令后其運(yùn)行結(jié)果如下:
         >> B=2
         B =
              2
         >> ndims(B)
         ans =
              2
         >> c=1:5
         c =
              1     2     3     4     5
         >> ndims(c)
         ans =
              2

通過(guò)例3-13可以看到,一般的非多維數(shù)組,在MATLAB中都是當(dāng)作二維數(shù)組處理的。

在貼一個(gè)函數(shù):鏈接http://blog.sina.com.cn/s/blog_83057b2401012rxj.html

function :填充圖像或填充數(shù)組

use:

B = padarray(A,padsize,padval,direction)
  A為輸入圖像,B為填充后的圖像,padsize給出了給出了填充的行數(shù)和列數(shù),通常用[r c]來(lái)表示。padval和direction分別表示填充方法和方向。它們的具體值和描述如下:
  padval:'symmetric'表示圖像大小通過(guò)圍繞邊界進(jìn)行鏡像反射來(lái)擴(kuò)展;
       
'replicate'表示圖像大小通過(guò)復(fù)制外邊界中的值來(lái)擴(kuò)展;
       
'circular'圖像大小通過(guò)將圖像看成是一個(gè)二維周期函數(shù)的一個(gè)周期來(lái)進(jìn)行擴(kuò)展。
  direction:'pre'表示在每一維的第一個(gè)元素前填充;
        'post'表示在每一維的最后一個(gè)元素后填充;
        'both'表示在每一維的第一個(gè)元素前和最后一個(gè)元素后填充,此項(xiàng)為默認(rèn)值。
  若參量中不包括direction,則默認(rèn)值為'both'。若參量中不包含padval,則默認(rèn)用零來(lái)填充。若參量中不包括任何參數(shù),則默認(rèn)填充為零且方向?yàn)?#39;both'。在計(jì)算結(jié)束時(shí),圖像會(huì)被修剪成原始大小。

[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;

看完上述內(nèi)容,你們掌握如何理解matlab函數(shù)的方法了嗎?如果還想學(xué)到更多技能或想了解更多相關(guān)內(nèi)容,歡迎關(guān)注億速云行業(yè)資訊頻道,感謝各位的閱讀!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI