最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

北太天元學習37-以nanmedian函數(shù)為例進一步講講如何寫一個m函數(shù)

2023-08-15 22:27 作者:盧朓  | 我要投稿

前面我們是介紹了如何寫m函數(shù), 但是實際上,我們可以配合 nargin, nargout 等參數(shù)讓m函數(shù)寫得更加智能一些,nargin 是用戶調(diào)用函數(shù)時使用的輸入的參數(shù)的個數(shù),nargout 是用戶調(diào)用時寫的返回參數(shù)的個數(shù)。 我們可以對用戶輸入的參數(shù)進行檢查后再進行運算,不然的話,由于用戶輸入的數(shù)據(jù)類型不在程序考慮的范圍之內(nèi),引發(fā)的錯誤是不可預料的,從而也是讓用戶感到困惑的。

如寫一個

?? function y = fun1(x)

??????? x(1) = 2 ;

????end

用戶調(diào)用時寫. fun1, 此時 x 沒有賦值,由于沒有檢查,會在 x(1) = 2 時報錯,從而讓用戶很困惑,我根本沒有輸入x,怎么報錯是和x有關呢? 我們可以使用 if(nargin ~= 1) 來判斷,并且指出用戶需要輸入一個參數(shù)x。 有時候,我們希望能夠使用一些默認值,

function y = fun2(x, dim)

如果用戶輸入一個參數(shù),那么我們想讓dim取默認值1, 我們也可以通過 nargin 這個參數(shù)判斷

用戶調(diào)用時輸入的參數(shù)的個是是否是1個,如果是1個,就是dim = 1.

我以中位數(shù)算法的一個變種,即剔除NaN數(shù)據(jù)的中位數(shù)算法的m函數(shù)為例 進一步講講寫m函數(shù)要注意的一些點。 中位數(shù)(Median)又稱中值,統(tǒng)計學中的專有名詞,是按順序排列的一組數(shù)據(jù)中居于中間位置的數(shù),代表一個樣本、種群或概率分布中的一個數(shù)值,其可將數(shù)值集合劃分為相等的上下兩部分。對于有限的數(shù)集,可以通過把所有觀察值高低排序后找出正中間的一個作為中位數(shù)。如果觀察值有偶數(shù)個,通常取最中間的兩個數(shù)值的平均數(shù)作為中位數(shù)。

代碼給在了后面,大家還是看我的視頻講解吧。視頻講解中還順便講了講北太天元的一些內(nèi)置函數(shù)的用法。 如

  1. isnan 函數(shù)

  2. isnumeric 函數(shù)

  3. isscalar 判斷輸入的數(shù)據(jù)是否是一個標量,即是否是1x1的矩陣

  4. any 函數(shù), ? ?any(A) 返回的是一個向量, any(any(A)) 返回一個數(shù)

  5. median 函數(shù)

% nanmedian在計算前先剔除掉了數(shù)組內(nèi)的NaN值。只讓有值的數(shù)據(jù)參與計算,
% 例如 A = [ 1????? 3???? NaN ; ?
%???????????? NaN??? 5???? NaN ;
%?? ??? ??? ??? ??? ??? ? 2????? 8???? NaN ];
% nanmedian(A ) =[1.5, 5 , NaN ];
% median(A) = [ NaN, 5, NaN] ;
% nanmedian(A) = [ 1.5, 5, Nan];

function y = nanmedian(x, dim);
? if (nargin < 1)
??? help nanmedian;
?? ??? ?return
? end

? if ( ~ (isnumeric (x) ) )
??? error ("nanmedian: x 必須是數(shù)值矩陣");
? end

? if (isempty (x))
??? error ("nonmedian: x 不能是空矩陣");
? end

? nd = length(size(x)); % matlab 的 ndims(x)
?? ?if(nd ~= 2 )
?? ??? ?error("nonmedian: x 只能是mxn矩陣")
?? ?end
? sz = size (x);
? if (nargin < 2)
??? % 找到第一個長度大于1的維數(shù)
??? dim = find (sz > 1, 1) ;
?? ??? ?if (isempty(dim))
?? ??? ??? ? dim = 1;
?? ??? ?end
? else
??? if ( ~(isscalar (dim) && dim == fix (dim) && dim > 0 && (dim == 1 || dim == 2) ))
????? error ("nanmedian: dim 必須是一個合法的維數(shù),目前只能是1或者2");
??? end
? end
?? ?
?? ?if( ~ any(any(isnan(x)) ) ) % x 沒有一個element是 NaN
?? ??? ??? ?y = median(x,dim);
?? ??? ??? ?return;
?? ?end

?? ?% 下面假設 A dim 只有兩個,dim 要么是1,要么是2
?? ?if dim == 1
?? ??? ?m = size(x, 2);
?? ?else
?? ??? ?m = size(x, 1);
?? ?end

?? ?if dim == 1;
?? ??? ?y = zeros(1,m);
?? ?else
?? ??? ?y = zeros(m,1);
?? ?end

?? ?for k = 1:m
?? ??? ?if dim == 1
?? ??? ??? ?xk = x(:, k);
?? ??? ?else
?? ??? ??? ?xk = x(k, :);
?? ??? ?end
?? ??? ?xk = xk(find( ~isnan(xk) ));
?? ??? ?y(k) = median(xk);
?? ?end

end





北太天元學習37-以nanmedian函數(shù)為例進一步講講如何寫一個m函數(shù)的評論 (共 條)

分享到微博請遵守國家法律
拉孜县| 德安县| 朝阳区| 榆中县| 寻甸| 长沙市| 阳原县| 洮南市| 长治县| 石林| 尤溪县| 康平县| 且末县| 兴安盟| 西宁市| 深泽县| 巨鹿县| 枝江市| 新干县| 浮山县| 丘北县| 合肥市| 出国| 天峨县| 全州县| 会同县| 定陶县| 玉环县| 雅江县| 顺义区| 湛江市| 缙云县| 通州市| 清新县| 太和县| 崇左市| 赣榆县| 当阳市| 上蔡县| 乌兰察布市| 两当县|