標籤:

cody第3題--也談從sum說起

說起sum這個函數,可謂無人不知,無人不曉。

正好cody團隊,把這個sum函數的用法作為一道題目發布在cody平台上, 這是cody上的第3道題目

題目的鏈接如下:cn.mathworks.com/matlab

咱們先說說這道題目的解法,然後再談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 |