cody第3題--也談從sum說起
說起sum這個函數,可謂無人不知,無人不曉。
正好cody團隊,把這個sum函數的用法作為一道題目發布在cody平台上, 這是cody上的第3道題目
題目的鏈接如下:https://cn.mathworks.com/matlabcentral/cody/problems/3-find-the-sum-of-all-the-numbers-of-the-input-vector
咱們先說說這道題目的解法,然後再談sum函數的用法
這個題目的解法大致分為以下幾種思路(由於有1萬多solution, 因此可能會有漏掉,大家看到的話,可以給補上):
(1)循環的方式
這種方式比較簡單,基本上學過程序的人都會寫,我就不寫了。
(2)遞歸
function y = vecsum(x)if isscalar(x) y = x;else y = x(1) + vecsum(x(2 : end));end
(3)矩陣乘法
x * ones(size(x))
(4)內積
dot(x, ones(size(x)))
(5)sum函數
sum(x)
sum函數用法,幫助文件上面都有,我不贅述,就說點心得
(1)類似於sum的函數很多,其有一個參數表示維度,一般默認1是按列操作,2是按行操作等等,注意sum(x)並不是總等於sum(x,1)
>> x = 1 : 4;>> sum(x)ans = 10>> sum(x, 1)ans = 1 2 3 4
(2)被求和的數組中如果有NaN值,可以通過參數設置跳過,否則結果會是NaN值
>> x = [1 2 NaN 3]x = 1 2 NaN 3>> sum(x)ans = NaN>> sum(x, omitnan)ans = 6>> nansum(x)ans = 6
(3)可以對輸出的數據類型進行設定,這樣計算和數據類型轉化就在sum一個函數中完成了
>> x = int8(1:4)x = 1×4 int8 row vector 1 2 3 4>> sum(x, double)ans = 10>> class(ans)ans =double
(4)sum支持對duration類型的數值進行運算
>> D = duration(1,30:33,0)D = 1×4 duration array 01:30:00 01:31:00 01:32:00 01:33:00>> sum(D)ans = duration 06:06:00
(5)sum支持大數據和C/C++代碼生成
這個對大數據類型tall數組操作比較方便;簡單的運算生成c++代碼似乎沒有必要,但是調用sum的函數文件,生成C++代碼的可能性就變大了。
PS: MATLAB博大精深,本人才疏學淺,有寫的不對的地方,希望大家指正
推薦閱讀:
※漫談Simulink:什麼是代數環?
※APPs(000)關於專欄內容介紹
※Matlab啟動後,current folder顯示processing,然後就很卡,不能用了怎麼辦?
※如何用Matlab畫一朵花?
※已知橢圓5個點,用數學軟體求橢圓周長?
TAG:MATLAB |