<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          Python函數(shù)式編程:map/reduce

          共 2406字,需瀏覽 5分鐘

           ·

          2022-08-01 02:09

          點(diǎn)擊上方小白學(xué)視覺”,選擇加"星標(biāo)"或“置頂

          重磅干貨,第一時(shí)間送達(dá)

          作為一種抽象程度極高的編程范式,函數(shù)式編程的最大特點(diǎn)就是允許函數(shù)本身作為一個參數(shù)傳入另一個函數(shù),并且也可以返回一個函數(shù)。本文介紹Python函數(shù)式編程的兩個極為重要的函數(shù):map和reduce。在介紹這兩個函數(shù)前,先簡單說下什么是高階函數(shù)。

          高階函數(shù)


              我們求平方根函數(shù)的例子來解釋什么是高階函數(shù)。

          >>> math.sqrt(16)4.0>>> math.sqrt<built-in function math.sqrt>

              由上可見,math.sqrt(16)是函數(shù)調(diào)用,而math.sqrt則是函數(shù)本身。Python允許將函數(shù)本身賦值給一個變量,所以我們可以看到如下效果:

          >>> f = math.sqrt>>> f<built-in function math.sqrt>

              于是我們可以得到結(jié)論:Python中變量可以指向函數(shù)。

              變量可以指向函數(shù),函數(shù)的參數(shù)可以接受變量,那一個函數(shù)就可以接受另一個函數(shù)作為參數(shù),這樣的函數(shù)我們稱之為高階函數(shù)。

          def add(x,y,f):    return f(x)+f(y)>>> add(16,9,math.sqrt)7.0 


          map函數(shù)


              作為Python函數(shù)式編程的代表,你可以將map函數(shù)理解為數(shù)學(xué)上的映射,map函數(shù)接受兩個參數(shù),一個是函數(shù),另一個則是函數(shù)所作用的可迭代對象。map將函數(shù)依次作用在可迭代對象的每一個元素上,并將結(jié)果作為一個迭代器返回。且看實(shí)例:

              例如我們有一個函數(shù)f(x)=x3 ,有一個list L=[1,2,3,4,5],我們就可以用map函數(shù)來將函數(shù)作用到這個可迭代對象list上:

          >>> def f(x):...    return x*x*x...>>> L = [1, 2, 3, 4, 5]>>> L2 = map(f, L)>>> list(L2)[1, 8, 27, 64, 125]

              map函數(shù)的好處是可以將運(yùn)算規(guī)則抽象化,對于簡單函數(shù)我們也許不能體會到方便之處,但對于復(fù)雜函數(shù),map的便利性是顯而易見的。例如將一個list里面所有數(shù)字轉(zhuǎn)化為字符串只需要一行代碼:

          >>> list(map(str, [1, 2, 3]))['1', '2', '3']


          reduce函數(shù)


              如果說map函數(shù)理解為映射的話,那reduce函數(shù)則可以理解為歸約或者迭代。reduce函數(shù)也只接受兩個參數(shù),一個是歸約函數(shù),一個是函數(shù)所作用的可迭代對象。reduce將一個函數(shù)f作用在一個list上的迭代思想如下:

          reduce(f, [x1, x2, x3, x4]) = f(f(f(x1, x2), x3), x4)

              例如我們想要將一個序列[1,2,3,4,5]變成整數(shù)12345,用reduce函數(shù)可寫為:

          >>> from functools import reduce>>> def fn(x, y):...     return x * 10 + y...>>> reduce(fn, [1, 2, 3, 4, 5])12345

              這里僅簡單的對map和reduce函數(shù)做個簡單筆記,內(nèi)容不多,但關(guān)鍵在于掌握其函數(shù)式編程的思想精髓。借助于map/reduce的函數(shù)式編程思想,Hadoop的大數(shù)據(jù)處理工具M(jìn)apReduce已經(jīng)將該思想作為一種編程模型,進(jìn)行大規(guī)模數(shù)據(jù)集的并行運(yùn)算了。等小編將來學(xué)習(xí)了Hadoop,再來仔細(xì)說說MapReduce吧。

          好消息!

          小白學(xué)視覺知識星球

          開始面向外開放啦??????




          下載1:OpenCV-Contrib擴(kuò)展模塊中文版教程
          在「小白學(xué)視覺」公眾號后臺回復(fù):擴(kuò)展模塊中文教程即可下載全網(wǎng)第一份OpenCV擴(kuò)展模塊教程中文版,涵蓋擴(kuò)展模塊安裝、SFM算法、立體視覺、目標(biāo)跟蹤、生物視覺、超分辨率處理等二十多章內(nèi)容。

          下載2:Python視覺實(shí)戰(zhàn)項(xiàng)目52講
          小白學(xué)視覺公眾號后臺回復(fù):Python視覺實(shí)戰(zhàn)項(xiàng)目,即可下載包括圖像分割、口罩檢測、車道線檢測、車輛計(jì)數(shù)、添加眼線、車牌識別、字符識別、情緒檢測、文本內(nèi)容提取、面部識別等31個視覺實(shí)戰(zhàn)項(xiàng)目,助力快速學(xué)校計(jì)算機(jī)視覺。

          下載3:OpenCV實(shí)戰(zhàn)項(xiàng)目20講
          小白學(xué)視覺公眾號后臺回復(fù):OpenCV實(shí)戰(zhàn)項(xiàng)目20講,即可下載含有20個基于OpenCV實(shí)現(xiàn)20個實(shí)戰(zhàn)項(xiàng)目,實(shí)現(xiàn)OpenCV學(xué)習(xí)進(jìn)階。

          交流群


          歡迎加入公眾號讀者群一起和同行交流,目前有SLAM、三維視覺、傳感器、自動駕駛、計(jì)算攝影、檢測、分割、識別、醫(yī)學(xué)影像、GAN算法競賽等微信群(以后會逐漸細(xì)分),請掃描下面微信號加群,備注:”昵稱+學(xué)校/公司+研究方向“,例如:”張三 + 上海交大 + 視覺SLAM“。請按照格式備注,否則不予通過。添加成功后會根據(jù)研究方向邀請進(jìn)入相關(guān)微信群。請勿在群內(nèi)發(fā)送廣告,否則會請出群,謝謝理解~


          瀏覽 29
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評論
          圖片
          表情
          推薦
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  日本日逼网站 | 神马午夜电影一区二区 | 不卡的岛国av | 婷婷五月综合网 | 亚洲免费色情 |