首頁 資訊 python卡路里健康餐程序 python燃燒卡路里

python卡路里健康餐程序 python燃燒卡路里

來源:泰然健康網(wǎng) 時(shí)間:2024年12月08日 11:50

文章目錄

2.15 Python 中的廣播 Broadcasting in Python

我整理的一些關(guān)于Python的項(xiàng)目學(xué)習(xí)資料+視頻(附講解~~)和大家一起分享、學(xué)習(xí)一下:

 https://d.51cto.com/wO38C1

2.15 Python 中的廣播 Broadcasting in Python

觀察上圖。
這是一個(gè)不同食物(每100g)中不同營(yíng)養(yǎng)成分的卡路里含量表格,表格為3行4列。

列:食物種類,蘋果,牛肉,雞蛋,土豆。行:營(yíng)養(yǎng)成分,碳水化合物,蛋白質(zhì),脂肪。

現(xiàn)在想要計(jì)算不同食物中不同營(yíng)養(yǎng)成分中的卡路里百分比。
以計(jì)算蘋果中的碳水化合物卡路里百分比含量為例。
首先計(jì)算蘋果(100g)中三種營(yíng)養(yǎng)成分卡路里總和56+1.2+1.8 = 59,然后用56/59 = 94.9%算出結(jié)果??梢钥闯鎏O果中的卡路里大部分來自于碳水化合物,而牛肉則不同。

對(duì)于其他食物,計(jì)算方法類似。先按列求和,得到每種食物的三種營(yíng)養(yǎng)成分總和,然后分別用不同營(yíng)養(yǎng)成分的卡路里數(shù)量除以總和,計(jì)算百分比。

問題來了,是否可以不用顯示的for循環(huán)完成所有計(jì)算?

我們把上面的表格等于 3 x 4 的矩陣A。然后用1行代碼對(duì)列求和,得到4個(gè)數(shù)字,表示4種食物的卡路里總量。最后用第二行代碼把每個(gè)元素都除以對(duì)應(yīng)的列之和,得到每種食物每種營(yíng)養(yǎng)成分的百分比。

代碼如下

運(yùn)行結(jié)果

注意: A.sum(axis = 0),axis表示沿著哪個(gè)軸求和。0表示是垂直的,也就是列;1表示水平的,也就是行。

percentage=100*A/cal.reshape(1,4)則調(diào)用了numpy中的廣播機(jī)制。

這里使用3x4的矩陣A除以 1x4 的矩陣cal。從技術(shù)上說,執(zhí)行第一行代碼后,變量cal已經(jīng)是一個(gè)1x4矩陣了,不需要reshape(重塑)成1x4,似乎有點(diǎn)多余。但是,當(dāng)我們寫代碼時(shí)不確定矩陣維度(尺寸)的時(shí)候,通常會(huì)對(duì)矩陣進(jìn)行重塑來確保得到我們想要的(正確的)列向量或行向量。

reshape是一個(gè)常用時(shí)間的操作,時(shí)間復(fù)雜度是O(1),它的調(diào)用代價(jià)極低。不要害怕使用reshape來得到你需要的矩陣形狀。

現(xiàn)在的問題是,你怎么讓一個(gè)3x4的矩陣除以1x4的矩陣呢?

例1

如上圖。在python中,當(dāng)一個(gè) 4x1 的列向量與一個(gè)常數(shù)做加法時(shí),實(shí)際上會(huì)將常數(shù)擴(kuò)展為一個(gè) 4x1 的列向量,然后兩者做逐元素加法,結(jié)果就是右邊的這個(gè)向量。這種廣播機(jī)制對(duì)于行向量和列向量均可以使用。前面介紹邏輯回歸時(shí)候曾經(jīng)說過,常數(shù)b也是這樣擴(kuò)展的。

例2

再看上圖。用一個(gè) 2x3 的矩陣和一個(gè) 1x3 的矩陣相加,或者擴(kuò)展到一般情況,讓一個(gè)m x n的矩陣和一個(gè)1 x n的矩陣相加。python把1xn的矩陣復(fù)制m次,把它變成一個(gè)m x n的矩陣。所以,上圖中1x3的矩陣會(huì)變成2x3的矩陣,然后再和第一個(gè)的2x3矩陣逐個(gè)元素相加。這里就和我們計(jì)算percentage時(shí)候處理方法完全一樣了,只不過計(jì)算percentage用的是除法。

例3

如上圖。這里相當(dāng)于是一個(gè) 2x3 或者說m x n 的矩陣加上一個(gè) 2x1 或者說m x 1的矩陣。在進(jìn)行運(yùn)算時(shí),會(huì)先將m x 1矩陣水平復(fù)制n次,變成一個(gè) m x n的矩陣,然后再逐個(gè)元素相加。

總結(jié):python中廣播的通用規(guī)則

對(duì)于1個(gè)m x n的矩陣,如果要加減乘除1個(gè) 1 x n的矩陣,python首先會(huì)把1 x n的矩陣復(fù)制m次(按行復(fù)制),變成一個(gè)m x n的矩陣,然后逐個(gè)元素加減乘除。對(duì)于1個(gè)m x n的矩陣,如果要加減乘除1個(gè) m x 1的矩陣,python首先會(huì)把m x 1的矩陣復(fù)制n次(按列復(fù)制),同樣變成一個(gè)m x n的矩陣,然后逐個(gè)元素加減乘除。對(duì)于1個(gè)m x 1的矩陣(列向量),如果要加減乘除1個(gè)實(shí)數(shù),那就是把實(shí)數(shù)復(fù)制m次,得到另外1個(gè)m x 1的矩陣,然后逐個(gè)元素加減乘除對(duì)于1個(gè)1 x n的矩陣(行向量),如果要加減乘除1個(gè)實(shí)數(shù),那就是把實(shí)數(shù)復(fù)制n次,得到另外1個(gè)1 x n的矩陣,然后逐個(gè)元素加減乘除

在numpy文檔中搜索broadcasting可以獲得詳細(xì)說明。

習(xí)慣用Matlab/Octave 編程的人,可能會(huì)用有類似功能的函數(shù)bsxfun。不過NN只需要python就可以了。

整理的一些關(guān)于Python的項(xiàng)目學(xué)習(xí)資料+視頻(附講解~~),需要自取

 https://d.51cto.com/wO38C1

本文章為轉(zhuǎn)載內(nèi)容,我們尊重原作者對(duì)文章享有的著作權(quán)。如有內(nèi)容錯(cuò)誤或侵權(quán)問題,歡迎原作者聯(lián)系我們進(jìn)行內(nèi)容更正或刪除文章。

收藏 評(píng)論 舉報(bào)

相關(guān)文章

相關(guān)知識(shí)

健身打卡,燃燒你的卡路里
健康輕食,讓你在夏日里燃燒更多卡路里!
燃燒你的卡路里!
靠性愛燃燒卡路里 ,靠譜不?
燃燒卡路里
燃燒卡路里 健康瘦身的必要條件
燃燒卡路里!每日健身打卡計(jì)劃第二期火爆來襲!
減肥必看!燃脂必做!8大運(yùn)動(dòng)快速燃燒卡路里!
燃燒卡路里,怎樣才合理
(全民健身)趣味燃燒卡路里挑戰(zhàn)賽即將開賽

網(wǎng)址: python卡路里健康餐程序 python燃燒卡路里 http://m.u1s5d6.cn/newsview363387.html

推薦資訊