中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

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

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何理解matlab函數

發布時間:2021-10-14 10:19:29 來源:億速云 閱讀:173 作者:柒染 欄目:編程語言

如何理解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函數的方法了嗎?如果還想學到更多技能或想了解更多相關內容,歡迎關注億速云行業資訊頻道,感謝各位的閱讀!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

兰西县| 永兴县| 防城港市| 抚远县| 镇平县| 江都市| 五大连池市| 安平县| 隆德县| 梁山县| 武乡县| 西林县| 进贤县| 翁源县| 禄丰县| 苏尼特左旗| 三穗县| 屏边| 台安县| 德化县| 遂宁市| 务川| 兴义市| 安宁市| 甘肃省| 长春市| 射阳县| 荃湾区| 德钦县| 长岛县| 东山县| 墨竹工卡县| 随州市| 张家口市| 富平县| 浦北县| 凌海市| 新龙县| 镇平县| 辉南县| 平原县|