国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

三行Python代碼,讓數(shù)據(jù)處理速度提高2到6倍

這篇具有很好參考價(jià)值的文章主要介紹了三行Python代碼,讓數(shù)據(jù)處理速度提高2到6倍。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

本文可以教你僅使用 3 行代碼,大大加快數(shù)據(jù)預(yù)處理的速度。

Python 是機(jī)器學(xué)習(xí)領(lǐng)域內(nèi)的首選編程語言,它易于使用,也有很多出色的庫來幫助你更快處理數(shù)據(jù)。但當(dāng)我們面臨大量數(shù)據(jù)時(shí),一些問題就會(huì)顯現(xiàn)……

在默認(rèn)情況下,Python 程序是單個(gè)進(jìn)程,使用單 CPU 核心執(zhí)行。而大多數(shù)當(dāng)代機(jī)器學(xué)習(xí)硬件都至少搭載了雙核處理器。這意味著如果沒有進(jìn)行優(yōu)化,在數(shù)據(jù)預(yù)處理的時(shí)候會(huì)出現(xiàn)「一核有難九核圍觀」的情況——超過 50% 的算力都會(huì)被浪費(fèi)。在當(dāng)前四核處理器(英特爾酷睿 i5)和 6 核處理器(英特爾酷睿 i7)大行其道的時(shí)候,這種情況會(huì)變得更加明顯。

三行Python代碼,讓數(shù)據(jù)處理速度提高2到6倍

? 幸運(yùn)的是,Python 庫中內(nèi)建了一些隱藏的特性,可以讓我們充分利用所有 CPU 核心的能力。通過使用 Python concurrent.futures 模塊,我們只需要 3 行代碼就可以讓一個(gè)普通的程序轉(zhuǎn)換成適用于多核處理器并行處理的程序。

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

讓我們舉一個(gè)簡(jiǎn)單的例子,在單個(gè)文件夾中有一個(gè)圖片數(shù)據(jù)集,其中有數(shù)萬張圖片。在這里,我們決定使用 1000 張。我們希望在所有圖片被傳遞到深度神經(jīng)網(wǎng)絡(luò)之前將其調(diào)整為 600×600 像素分辨率的形式。以下是你經(jīng)常會(huì)在 GitHub 上看到的標(biāo)準(zhǔn) Python 代碼:

import?glob

import?os

import?cv2



###?Loop?through?all?jpg?files?in?the?current?folder?

###?Resize?each?one?to?size?600x600

for?image_filename?in?glob.glob("*.jpg"):

?###?Read?in?the?image?data

?img?=?cv2.imread(image_filename)



?###?Resize?the?image

?img?=?cv2.resize(img,?(600,?600))?

上面的程序遵循你在處理數(shù)據(jù)腳本時(shí)經(jīng)??吹降暮?jiǎn)單模式:

1. 首先從需要處理內(nèi)容的文件(或其他數(shù)據(jù))列表開始。

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

讓我們?cè)谝粋€(gè)包含 1000 個(gè) jpeg 文件的文件夾上測(cè)試這個(gè)程序,看看運(yùn)行它需要多久:

time?python?standard_res_conversion.py

在我的酷睿 i7-8700k 6 CPU 上,運(yùn)行時(shí)間為 7.9864 秒!在這樣的高端 CPU 上,這種速度看起來是難以讓人接受的,看看我們能做點(diǎn)什么。

更快的方法

為了便于理解并行化的提升,假設(shè)我們需要執(zhí)行相同的任務(wù),比如將 1000 個(gè)釘子釘入木頭,假如釘入一個(gè)需要一秒,一個(gè)人就需要 1000 秒來完成任務(wù)。四個(gè)人組隊(duì)就只需要 250 秒。

在我們這個(gè)包含 1000 個(gè)圖像的例子中,可以讓 Python 做類似的工作:

jpeg 文件列表分成 4 個(gè)小組;

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

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

結(jié)合四個(gè)處理過程得到的結(jié)果得出最終結(jié)果列表。

這一方法的重點(diǎn)在于,Python 幫我們處理了所有棘手的工作。我們只需告訴它我們想要運(yùn)行哪個(gè)函數(shù),要用多少 Python 實(shí)例,剩下的就交給它了!只需改變?nèi)写a。實(shí)例:

import?glob

import?os

import?cv2

import?concurrent.futures



def?load_and_resize(image_filename):

?###?Read?in?the?image?data

?img?=?cv2.imread(image_filename)



?###?Resize?the?image

?img?=?cv2.resize(img,?(600,?600))?





###?Create?a?pool?of?processes.?By?default,?one?is?created?for?each?CPU?in?your?machine.

with?concurrent.futures.ProcessPoolExecutor()?as?executor:

?###?Get?a?list?of?files?to?process

?image_files?=?glob.glob("*.jpg")



?###?Process?the?list?of?files,?but?split?the?work?across?the?process?pool?to?use?all?CPUs

?###?Loop?through?all?jpg?files?in?the?current?folder?

?###?Resize?each?one?to?size?600x600

?executor.map(load_and_resize,?image_files)

從以上代碼中摘出一行:

with?concurrent.futures.ProcessPoolExecutor()?as?executor:

你的 CPU 核越多,啟動(dòng)的 Python 進(jìn)程越多,我的 CPU 6 個(gè)核。實(shí)際處理代碼如下:

executor.map(load_and_resize,?image_files)

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

如果再次用以下代碼運(yùn)行我們的程序:

time?python?fast_res_conversion.py

我們可以將運(yùn)行時(shí)間降到 1.14265 秒,速度提升了近 6 倍!

注意:在生成更多 Python 進(jìn)程及在它們之間整理數(shù)據(jù)時(shí)會(huì)有一些開銷,所以速度提升并不總是這么明顯。但是總的來說,速度提升還是非??捎^的。

它總是那么快嗎??

如果你有一個(gè)數(shù)據(jù)列表要處理,而且在每個(gè)數(shù)據(jù)點(diǎn)上執(zhí)行相似的運(yùn)算,那么使用 Python 并行池是一個(gè)很好的選擇。但有時(shí)這不是最佳解決方案。并行池處理的數(shù)據(jù)不會(huì)在任何可預(yù)測(cè)的順序中進(jìn)行處理。如果你對(duì)處理后的結(jié)果有特殊順序要求,那么這個(gè)方法可能不適合你。

你處理的數(shù)據(jù)也必須是 Python 可以「炮制」的類型。所幸這些指定類別都很常見。以下來自 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é)果是可選擇的(參見「Pickling Class Instances」一節(jié))。

END文章來源地址http://www.zghlxwxcb.cn/news/detail-417175.html

到了這里,關(guān)于三行Python代碼,讓數(shù)據(jù)處理速度提高2到6倍的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 【Python】數(shù)據(jù)預(yù)處理之將類別數(shù)據(jù)轉(zhuǎn)換為數(shù)值的方法(含Python代碼分析)

    在進(jìn)行Python數(shù)據(jù)分析的時(shí)候,首先要進(jìn)行數(shù)據(jù)預(yù)處理。但是有時(shí)候不得不處理一些非數(shù)值類別的數(shù)據(jù),遇到這類問題時(shí)該怎么解決呢? 目前為止,總結(jié)了三種方法,這里分享給大家。 這種方法是屬于映射字典將類標(biāo)轉(zhuǎn)換為整數(shù),不過這種方法適用范圍有限。 我們首先創(chuàng)建一

    2024年02月09日
    瀏覽(26)
  • 自然語言處理與大數(shù)據(jù):如何提高數(shù)據(jù)分析效率

    自然語言處理(NLP,Natural Language Processing)是計(jì)算機(jī)科學(xué)與人工智能領(lǐng)域的一個(gè)分支,研究如何讓計(jì)算機(jī)理解、生成和處理人類語言。自然語言處理技術(shù)廣泛應(yīng)用于各個(gè)領(lǐng)域,包括機(jī)器翻譯、語音識(shí)別、情感分析、文本摘要等。 隨著數(shù)據(jù)的大量生成和存儲(chǔ),大數(shù)據(jù)技術(shù)已經(jīng)成為

    2024年04月09日
    瀏覽(24)
  • 常用python代碼大全-python使用json模塊處理JSON數(shù)據(jù)

    在Python中, json 模塊提供了一種簡(jiǎn)單的方法來編碼和解碼JSON數(shù)據(jù)。以下是一個(gè)簡(jiǎn)單的例子,說明如何使用 json 模塊來處理JSON數(shù)據(jù)。 首先,我們需要導(dǎo)入 json 模塊: 編碼(Encode)JSON 數(shù)據(jù) 要將Python對(duì)象編碼為JSON格式,我們可以使用 json.dumps() 函數(shù)。這個(gè)函數(shù)將Python對(duì)象轉(zhuǎn)換為

    2024年01月20日
    瀏覽(20)
  • 數(shù)據(jù)建模的云計(jì)算支持:利用云計(jì)算資源提高數(shù)據(jù)處理效率

    數(shù)據(jù)建模是數(shù)據(jù)科學(xué)和機(jī)器學(xué)習(xí)領(lǐng)域中的一個(gè)重要環(huán)節(jié),它涉及到將實(shí)際問題轉(zhuǎn)化為數(shù)學(xué)模型的過程。隨著數(shù)據(jù)規(guī)模的不斷擴(kuò)大,傳統(tǒng)的數(shù)據(jù)處理方法已經(jīng)無法滿足需求,因此需要尋找更高效的數(shù)據(jù)處理方法。云計(jì)算是一種基于互聯(lián)網(wǎng)的計(jì)算資源分配和共享方式,它可以提供

    2024年04月28日
    瀏覽(17)
  • MySQL表操作:提高數(shù)據(jù)處理效率的秘訣(進(jìn)階)(1)

    MySQL表操作:提高數(shù)據(jù)處理效率的秘訣(進(jìn)階)(1)

    ??**“生命不在于相信奇跡,而在于創(chuàng)造奇跡。”——朱學(xué)恒**?? ??作者:不能再留遺憾了?? ??專欄:MySQL學(xué)習(xí)?? ??本文章主要內(nèi)容:MySQL對(duì)表操作進(jìn)階。數(shù)據(jù)庫約束、表的設(shè)計(jì)、新增,后續(xù)會(huì)更新進(jìn)階表的查詢?? 前面我們已經(jīng)介紹過初識(shí)MySQL以及MySQL對(duì)庫和對(duì)表操作(

    2024年02月08日
    瀏覽(19)
  • MySQL表操作:提高數(shù)據(jù)處理效率的秘訣(進(jìn)階)(2)

    MySQL表操作:提高數(shù)據(jù)處理效率的秘訣(進(jìn)階)(2)

    ??“學(xué)習(xí)難免有坎坷,重要的是你能盡力而為,持之以恒?!?? ??作者:不能再留遺憾了?? ??專欄:MySQL學(xué)習(xí)?? ??本文章主要內(nèi)容:MySQL表操作進(jìn)階:聚合查詢和聯(lián)合查詢?? 前面我們學(xué)習(xí)了MySQL進(jìn)階的數(shù)據(jù)庫約束、表的設(shè)計(jì)和新增,那么今天我將為大家分享MySQL表查詢

    2024年02月08日
    瀏覽(20)
  • Python 框架學(xué)習(xí) Django篇 (八) 代碼優(yōu)化、數(shù)據(jù)庫冗余處理

    Python 框架學(xué)習(xí) Django篇 (八) 代碼優(yōu)化、數(shù)據(jù)庫冗余處理

    我們開發(fā)軟件系統(tǒng)的時(shí)候,需要不斷的反思我們代碼里面是否有可以優(yōu)化的地方。而優(yōu)化的重點(diǎn)之一,就是把冗余的代碼優(yōu)化為可以復(fù)用的庫。我們?cè)谇懊婢帉懥艘恍┕δ?,但是其中存在很多冗余的方?打開這3個(gè)文件我們可以看到他們的入口函數(shù)dispatcher? 實(shí)際的代碼相似度

    2024年02月06日
    瀏覽(24)
  • 數(shù)據(jù)不平衡處理方式之過采樣和欠采樣(Python代碼)

    數(shù)據(jù)不平衡處理方式之過采樣和欠采樣(Python代碼)

    sklearn.datasets.make_classification 官方地址: https://www.w3cschool.cn/doc_scikit_learn/scikit_learn-modules-generated-sklearn-datasets-make_classification.html sklearn.datasets.make_classification(n_samples=100, n_features=20, n_informative=2, n_redundant=2, n_repeated=0, n_classes=2, n_clusters_per_class=2, weights=None, flip_y=0.01, class_sep=1.0,

    2024年03月10日
    瀏覽(37)
  • Icesat-2 ATL13數(shù)據(jù)下載(不用python),python處理保姆式教學(xué)(附代碼)

    Icesat-2 ATL13數(shù)據(jù)下載(不用python),python處理保姆式教學(xué)(附代碼)

    1.數(shù)據(jù)下載(不用python) 進(jìn)入官網(wǎng)ICESat-2 Product Overviews | National Snow and Ice Data Center (nsidc.org) ?下滑找到你需要的產(chǎn)品,以下以ATL13為例 ? ?點(diǎn)擊進(jìn)入,找到Data Access Tool,點(diǎn)擊get ? ? ? ?登錄自己的 Earthdade賬號(hào) ? 準(zhǔn)備好自己研究區(qū)域 的shp矢量圖,沒有的話也可以自己圈畫,?

    2024年04月29日
    瀏覽(36)
  • 用通俗易懂的方式講解:數(shù)據(jù)預(yù)處理歸一化(附Python代碼)

    用通俗易懂的方式講解:數(shù)據(jù)預(yù)處理歸一化(附Python代碼)

    本文來自技術(shù)群小伙伴的分享,想加入按照如下方式 目前開通了技術(shù)交流群,群友已超過3000人,添加時(shí)最好的備注方式為:來源+興趣方向,方便找到志同道合的朋友 方式①、添加微信號(hào):dkl88191,備注:來自CSDN+技術(shù)交流 方式②、微信搜索公眾號(hào):Python學(xué)習(xí)與數(shù)據(jù)挖掘,后

    2023年04月10日
    瀏覽(23)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包