衡阳派盒市场营销有限公司

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

將Python數(shù)據(jù)處理速度提升2~6倍的簡(jiǎn)單方法

DPVg_AI_era ? 來源:未知 ? 作者:李倩 ? 2018-10-08 10:56 ? 次閱讀

CPU核心物盡其用!本文介紹了僅需3行代碼,將Python數(shù)據(jù)處理速度提升2~6倍的簡(jiǎn)單方法。這對(duì)大規(guī)模數(shù)據(jù)處理非常有用,一起來看。

Python是所有機(jī)器學(xué)習(xí)的首選編程語(yǔ)言。它易于使用,并擁有許多很棒的庫(kù),可以輕松地處理數(shù)據(jù)。但是當(dāng)我們需要處理大量數(shù)據(jù)時(shí),事情就變得棘手了......

“大數(shù)據(jù)”這個(gè)詞通常指的是數(shù)據(jù)集,一個(gè)數(shù)據(jù)集里的數(shù)據(jù)點(diǎn)如果沒有數(shù)百萬個(gè),也有數(shù)十萬。在這樣的規(guī)模上,每個(gè)小的計(jì)算加起來,而且我們需要在編碼過程的每個(gè)步驟保持效率。在考慮機(jī)器學(xué)習(xí)系統(tǒng)的效率時(shí),經(jīng)常被忽視的一個(gè)關(guān)鍵步驟就是預(yù)處理階段,我們必須對(duì)所有數(shù)據(jù)點(diǎn)進(jìn)行某種預(yù)處理操作。

默認(rèn)情況下,Python程序使用單個(gè)CPU作為單個(gè)進(jìn)程執(zhí)行。大多數(shù)用于機(jī)器學(xué)習(xí)的計(jì)算機(jī)至少有2個(gè)CPU核心。這意味著,對(duì)于2個(gè)CPU內(nèi)核的示例,在運(yùn)行預(yù)處理時(shí),50%或更多的計(jì)算機(jī)處理能力在默認(rèn)情況下不會(huì)做任何事情!當(dāng)你使用4核( Intel i5)或6核( Intel i7)時(shí),就更浪費(fèi)了。

但幸運(yùn)的是,內(nèi)置的Python庫(kù)中有一些隱藏的功能,可以讓我們充分利用所有CPU內(nèi)核!感謝Python的concurrent.futures模塊,只需3行代碼就可以將一個(gè)普通程序轉(zhuǎn)換為一個(gè)可以跨CPU核心并行處理數(shù)據(jù)的程序。

標(biāo)準(zhǔn)方法

讓我們舉一個(gè)簡(jiǎn)單的例子,我們?cè)谝粋€(gè)文件夾中有一個(gè)圖像數(shù)據(jù)集; 或者我們甚至有成千上萬的圖像!為了節(jié)省處理時(shí)間,我們?cè)谶@里使用1000張圖像。我們希望在將所有圖像在傳輸?shù)缴疃?a href="http://www.zgszdi.cn/tags/神經(jīng)網(wǎng)絡(luò)/" target="_blank">神經(jīng)網(wǎng)絡(luò)之前將其大小調(diào)整為600x600。下面就是你經(jīng)常在GitHub上看到的一些非常標(biāo)準(zhǔn)的Python代碼。

這個(gè)程序遵循在數(shù)據(jù)處理腳本中經(jīng)常看到的簡(jiǎn)單模式:

首先是要處理的文件(或其他數(shù)據(jù))列表;

你可以使用for循環(huán)逐個(gè)處理每個(gè)數(shù)據(jù)片段,然后在每個(gè)循環(huán)迭代上運(yùn)行預(yù)處理

讓我們?cè)谝粋€(gè)包含1000個(gè)jpeg文件的文件夾上測(cè)試這個(gè)程序,看看運(yùn)行需要多長(zhǎng)時(shí)間:

在我的具有6個(gè)CPU核心的i7-8700k上,這個(gè)程序的運(yùn)行時(shí)間是7.9864秒!對(duì)于這樣的高端CPU來說,似乎有點(diǎn)慢。讓我們看看我們可以做些什么來加快速度。

快速方式

為了理解我們希望Python如何并行處理事物,直觀地思考并行處理本身是有幫助的。假設(shè)我們必須執(zhí)行相同的任務(wù),例如將釘子釘入一塊木頭,我們的桶中有1000個(gè)釘子。如果釘每個(gè)釘子需要1秒鐘,那么1個(gè)人的話需要花1000秒完成工作。但是如果有4個(gè)人,我們會(huì)將整桶釘子平均分成4堆,然后每個(gè)人處理自己的一堆釘子。這樣,只需250秒即可完成任務(wù)!

在這個(gè)包含1000張圖像的任務(wù)中,也可以這樣處理:

將jpg文件列表分為4個(gè)較小的組。

運(yùn)行Python解釋器的4個(gè)獨(dú)立實(shí)例。

讓每個(gè)Python實(shí)例處理4個(gè)較小數(shù)據(jù)組中的一個(gè)。

結(jié)合4個(gè)過程的結(jié)果,得到最終的結(jié)果列表。

這里最重要的部分是Python為我們處理了所有艱苦的工作。我們只是告訴它我們想要運(yùn)行哪個(gè)函數(shù),以及使用多少Python實(shí)例,然后它完成了所有其他操作!我們只需修改3行代碼。

上面的代碼中的:

你有多少CPU核心就啟動(dòng)多少Python進(jìn)程,在我的例子中是6個(gè)。實(shí)際的處理代碼是這樣的:

executor.map()將你想要運(yùn)行的函數(shù)和一個(gè)列表作為輸入,列表中的每個(gè)元素都是函數(shù)的單個(gè)輸入。由于我們有6個(gè)核心,我們將同時(shí)處理列表中的6個(gè)項(xiàng)!

再次運(yùn)行程序看看:

運(yùn)行時(shí)間是1.14265秒,幾乎加速了6倍!

注意:產(chǎn)生更多Python進(jìn)程并在它們之間移動(dòng)數(shù)據(jù)時(shí),會(huì)產(chǎn)生一些開銷,因此不會(huì)總是得到這么大的速度提升。 但總的來說,加速相當(dāng)顯著。

是否總能大幅加速?

當(dāng)你有要處理的數(shù)據(jù)列表并且要對(duì)每個(gè)數(shù)據(jù)點(diǎn)執(zhí)行類似的計(jì)算時(shí),使用Python并行池是一個(gè)很好的解決方案。但是,它并不總是完美的。并行池處理的數(shù)據(jù)不會(huì)以任何可預(yù)測(cè)的順序處理。如果你需要處理的結(jié)果按特定順序排列,那么這種方法可能不適合。

你處理的數(shù)據(jù)還必須是Python知道如何“pickle”的類型。幸運(yùn)的是,這些類型很常見。以下來自Python官方文檔:

None, True, 及 False

整數(shù),浮點(diǎn)數(shù),復(fù)數(shù)

字符串,字節(jié),字節(jié)數(shù)組

僅包含可選對(duì)象的元組,列表,集合和詞典

在模塊的頂層定義的函數(shù)(使用def,而不是lambda)

在模塊頂層定義的內(nèi)置函數(shù)

在模塊頂層定義的類

這些類的實(shí)例,__dict__或調(diào)用__getstate __()的結(jié)果是可選擇的

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 數(shù)據(jù)處理
    +關(guān)注

    關(guān)注

    0

    文章

    613

    瀏覽量

    28631
  • 機(jī)器學(xué)習(xí)

    關(guān)注

    66

    文章

    8439

    瀏覽量

    133087
  • python
    +關(guān)注

    關(guān)注

    56

    文章

    4807

    瀏覽量

    85040

原文標(biāo)題:3行代碼,Python數(shù)據(jù)預(yù)處理提速6倍!

文章出處:【微信號(hào):AI_era,微信公眾號(hào):新智元】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    格式化數(shù)據(jù)存儲(chǔ)到char數(shù)組的最簡(jiǎn)單方法是什么?

    os_printf文本格式化為 UART 輸出的函數(shù)。 格式化數(shù)據(jù)存儲(chǔ)到 char 數(shù)組的最簡(jiǎn)單方法是什么?
    發(fā)表于 07-11 08:01

    基于LabVIEW的數(shù)據(jù)處理方法

    基于LabVIEW的數(shù)據(jù)處理方法
    發(fā)表于 04-26 17:28

    Python存儲(chǔ)數(shù)據(jù)詳解

    人閱讀和編寫,同時(shí)也易于機(jī)器解析和生成,并有效地提升網(wǎng)絡(luò)傳輸效率。2. csv文件Python可以數(shù)據(jù)存儲(chǔ)為CSV文件格式,我們可以用ex
    發(fā)表于 03-29 15:47

    請(qǐng)問連續(xù)多包數(shù)據(jù)數(shù)據(jù)傳輸速度超過DSP的數(shù)據(jù)處理速度怎么解決?

    RT目前在做一個(gè)項(xiàng)目,可能會(huì)出現(xiàn)連續(xù)多包數(shù)據(jù)數(shù)據(jù)傳輸速度超過DSP的數(shù)據(jù)處理速度,請(qǐng)問這種情況怎么解決?是否有現(xiàn)成的解決思路可以參考?
    發(fā)表于 09-30 08:05

    新庫(kù)添加到Petalinux rootfs的最簡(jiǎn)單方法是什么

    嗨,新庫(kù)添加到Petalinux rootfs的最簡(jiǎn)單方法是什么?1>如何預(yù)編譯的庫(kù)添加到rootfs,這將在petalinux-config -c rootfs中檢測(cè)到2>如何
    發(fā)表于 05-22 08:32

    如何利用nodemcu及Python數(shù)據(jù)處理進(jìn)行wifi的局域網(wǎng)遠(yuǎn)程溫度測(cè)量呢

    如何利用nodemcu及Python數(shù)據(jù)處理進(jìn)行wifi的局域網(wǎng)遠(yuǎn)程溫度測(cè)量呢?
    發(fā)表于 02-15 06:58

    學(xué)習(xí)PLC的2個(gè)簡(jiǎn)單方法

    學(xué)習(xí)PLC的2個(gè)簡(jiǎn)單方法 有的初學(xué)者在理論上花了很多功夫,結(jié)果半年下來還是沒有把PLC搞懂,其實(shí)他們只是缺少了一些PLC的實(shí)踐經(jīng)驗(yàn),
    發(fā)表于 04-02 13:58 ?1653次閱讀

    Python6個(gè)必備軟件功能及下載方式詳解

    如果你需要更快的 Python 應(yīng)用程序,最簡(jiǎn)單的實(shí)現(xiàn)的方法就是通過 PyPy ,Python 運(yùn)行時(shí)與實(shí)時(shí)(JIT)編譯器。與使用普通的 Pyth
    的頭像 發(fā)表于 12-01 15:48 ?3739次閱讀

    Python數(shù)據(jù)處理代碼合集免費(fèi)下載

    本文檔的主要內(nèi)容詳細(xì)介紹的是Python數(shù)據(jù)處理代碼合集免費(fèi)下載。
    發(fā)表于 09-20 08:00 ?7次下載

    測(cè)試IGBT的簡(jiǎn)單方法

    一些測(cè)試IGBT的簡(jiǎn)單方法
    的頭像 發(fā)表于 06-19 10:19 ?1.5w次閱讀

    微軟推更快地安裝win10的方法速度提升6

    對(duì)于那些想要快速安裝Windows 10的用戶來說,微軟現(xiàn)在給出了更快捷的方法,直接讓速度提升6
    的頭像 發(fā)表于 02-19 14:36 ?1601次閱讀
    微軟推更快地安裝win10的<b class='flag-5'>方法</b>,<b class='flag-5'>速度</b><b class='flag-5'>提升</b><b class='flag-5'>6</b><b class='flag-5'>倍</b>

    數(shù)據(jù)海量數(shù)據(jù)處理方法總結(jié)

    數(shù)據(jù)海量數(shù)據(jù)處理方法總結(jié)。
    發(fā)表于 04-26 09:16 ?13次下載

    LCD屏幕連接到Arduino mega的最簡(jiǎn)單方法

    電子發(fā)燒友網(wǎng)站提供《LCD屏幕連接到Arduino mega的最簡(jiǎn)單方法.zip》資料免費(fèi)下載
    發(fā)表于 10-19 09:49 ?1次下載
    <b class='flag-5'>將</b>LCD屏幕連接到Arduino mega的最<b class='flag-5'>簡(jiǎn)單方法</b>

    使用Bolt構(gòu)建鬧鐘的最簡(jiǎn)單方法

    電子發(fā)燒友網(wǎng)站提供《使用Bolt構(gòu)建鬧鐘的最簡(jiǎn)單方法.zip》資料免費(fèi)下載
    發(fā)表于 12-09 16:17 ?0次下載
    使用Bolt構(gòu)建鬧鐘的最<b class='flag-5'>簡(jiǎn)單方法</b>

    使用蜂鳴器創(chuàng)建警報(bào)的最簡(jiǎn)單方法

    電子發(fā)燒友網(wǎng)站提供《使用蜂鳴器創(chuàng)建警報(bào)的最簡(jiǎn)單方法.zip》資料免費(fèi)下載
    發(fā)表于 12-15 11:05 ?0次下載
    使用蜂鳴器創(chuàng)建警報(bào)的最<b class='flag-5'>簡(jiǎn)單方法</b>
    真人百家乐作假视频| 皇冠百家乐官网代理网址| 免费百家乐计划工具| 百家乐官网千术道具| 线上百家乐开户| 澳门百家乐官网哪家信誉最好| 大发888真钱游戏祖比| 百家乐信用哪个好| 优博百家乐官网yobo88| 贝博百家乐的玩法技巧和规则| 神州百家乐官网的玩法技巧和规则| 新津县| 玩百家乐掉房| 百家乐官网发牌规| 百家乐官网所有技巧| 澳门百家乐官网博| e世博百家乐官网技巧| 大发888娱乐城存款| 百家乐稳赚的方法| 百家乐官网赌场视屏| 卢氏县| 大发888博狗博彩| 缅甸百家乐龙虎斗| 金沙百家乐官网的玩法技巧和规则 | 沙龙百家乐官网破解| 威尼斯人娱乐城官方地址| 网上百家乐投注法| 新奥博百家乐官网娱乐城| 阿拉尔市| 大发888游戏平台 官方| 太阳城百家乐客户端| 新百家乐官网的玩法技巧和规则| 百利宫百家乐官网的玩法技巧和规则 | 88百家乐官网现金网| 赌场百家乐台| 做生意如何风水| 百家乐官网pc| 百家乐官网百家乐官网游戏| 六合彩开奖现场| 威尼斯人娱乐城海立方| 百家乐稳赢技法|