1. <strong id="7actg"></strong>
    2. <table id="7actg"></table>

    3. <address id="7actg"></address>
      <address id="7actg"></address>
      1. <object id="7actg"><tt id="7actg"></tt></object>

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

        共 2406字,需瀏覽 5分鐘

         ·

        2022-08-01 02:09

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

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

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

        高階函數(shù)


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

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

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

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

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

            變量可以指向函數(shù),函數(shù)的參數(shù)可以接受變量,那一個(gè)函數(shù)就可以接受另一個(gè)函數(shù)作為參數(shù),這樣的函數(shù)我們稱(chēng)之為高階函數(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ù)接受兩個(gè)參數(shù),一個(gè)是函數(shù),另一個(gè)則是函數(shù)所作用的可迭代對(duì)象。map將函數(shù)依次作用在可迭代對(duì)象的每一個(gè)元素上,并將結(jié)果作為一個(gè)迭代器返回。且看實(shí)例:

            例如我們有一個(gè)函數(shù)f(x)=x3 ,有一個(gè)list L=[1,2,3,4,5],我們就可以用map函數(shù)來(lái)將函數(shù)作用到這個(gè)可迭代對(duì)象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ī)則抽象化,對(duì)于簡(jiǎn)單函數(shù)我們也許不能體會(huì)到方便之處,但對(duì)于復(fù)雜函數(shù),map的便利性是顯而易見(jiàn)的。例如將一個(gè)list里面所有數(shù)字轉(zhuǎn)化為字符串只需要一行代碼:

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


        reduce函數(shù)


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

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

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

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

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

        好消息!

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

        開(kāi)始面向外開(kāi)放啦??????




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

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

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

        交流群


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


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

        手機(jī)掃一掃分享

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

        手機(jī)掃一掃分享

        分享
        舉報(bào)
        1. <strong id="7actg"></strong>
        2. <table id="7actg"></table>

        3. <address id="7actg"></address>
          <address id="7actg"></address>
          1. <object id="7actg"><tt id="7actg"></tt></object>
            日韩一级黄视频 | 国产69堂免费视频 | 久久久精品国产 | 人人草在线观看 | 国产999精品久久久久久绿帽 | 人妻无码 | h喷水荡肉失禁爽高h在线观看 | 国产精品中文字幕av | 91操在线 | 日本丰满bbbb护士 |