因?yàn)槌绦蛳萑胨姥h(huán)了,while x 0: 而你輸入的x始終是大于0的,就會一直持續(xù)不斷的運(yùn)行下去,進(jìn)而占用系統(tǒng)資源了。原因在于,你沒有終止while循環(huán)的條件,修改如下
成都創(chuàng)新互聯(lián)長期為上1000+客戶提供的網(wǎng)站建設(shè)服務(wù),團(tuán)隊(duì)從業(yè)經(jīng)驗(yàn)10年,關(guān)注不同地域、不同群體,并針對不同對象提供差異化的產(chǎn)品和服務(wù);打造開放共贏平臺,與合作伙伴共同營造健康的互聯(lián)網(wǎng)生態(tài)環(huán)境。為海北州企業(yè)提供專業(yè)的網(wǎng)站設(shè)計(jì)制作、成都做網(wǎng)站,海北州網(wǎng)站改版等技術(shù)服務(wù)。擁有十多年豐富建站經(jīng)驗(yàn)和眾多成功案例,為您定制開發(fā)。
def?my_abs(a,?x=?2):
s=?1;
while?x??0:
s=?s*a;
x?=?x-1??#?每循環(huán)一次x就減1,這樣一旦x=0就終止循環(huán)了
return?s
print(my_abs(4,3))
1. Pandas.apply() – 特征工程瑰寶
Pandas 庫已經(jīng)非常優(yōu)化了,但是大部分人都沒有發(fā)揮它的最大作用。想想它一般會用于數(shù)據(jù)科學(xué)項(xiàng)目中的哪些地方。一般首先能想到的就是特征工程,即用已有特征創(chuàng)造新特征。其中最高效的方法之一就是Pandas.apply(),即Pandas中的apply函數(shù)。
在Pandas.apply()中,可以傳遞用戶定義功能并將其應(yīng)用到Pandas Series的所有數(shù)據(jù)點(diǎn)中。這個函數(shù)是Pandas庫最好的擴(kuò)展功能之一,它能根據(jù)所需條件分隔數(shù)據(jù)。之后便能將其有效應(yīng)用到數(shù)據(jù)處理任務(wù)中。
2. Pandas.DataFrame.loc – Python數(shù)據(jù)操作絕妙技巧
所有和數(shù)據(jù)處理打交道的數(shù)據(jù)科學(xué)家(差不多所有人了!)都應(yīng)該學(xué)會這個方法。
很多時候,數(shù)據(jù)科學(xué)家需要根據(jù)一些條件更新數(shù)據(jù)集中某列的某些值。Pandas.DataFrame.loc就是此類問題最優(yōu)的解決方法。
3. Python函數(shù)向量化
另一種解決緩慢循環(huán)的方法就是將函數(shù)向量化。這意味著新建函數(shù)會應(yīng)用于輸入列表,并返回結(jié)果數(shù)組。在Python中使用向量化能至少迭代兩次,從而加速計(jì)算。
事實(shí)上,這樣不僅能加速代碼運(yùn)算,還能讓代碼更加簡潔清晰。
4. Python多重處理
多重處理能使系統(tǒng)同時支持一個以上的處理器。
此處將數(shù)據(jù)處理分成多個任務(wù),讓它們各自獨(dú)立運(yùn)行。處理龐大的數(shù)據(jù)集時,即使是apply函數(shù)也顯得有些遲緩。
關(guān)于優(yōu)化Python編程的4個妙招,青藤小編就和您分享到這里了。如果您對python編程有濃厚的興趣,希望這篇文章可以為您提供幫助。如果您還想了解更多關(guān)于python編程的技巧及素材等內(nèi)容,可以點(diǎn)擊本站的其他文章進(jìn)行學(xué)習(xí)。
Ball是一個類,類定義 在代碼 最前面
myBall=Ball() Ball() 生成 一個Ball類的實(shí)例,myBall是一個Ball類實(shí)例
myBall.bounce()調(diào)用 類方法bounce
進(jìn)入python shell,執(zhí)行下 import matplotlib 看看,如果提示錯誤,就是沒有正確安裝,安裝應(yīng)該也簡單pip install matplotlib應(yīng)該就行了。我用的是python2.7,3.5沒試過
登錄
首頁
學(xué)習(xí)
實(shí)踐
活動
專區(qū)
工具
TVP
返回騰訊云官網(wǎng)
Python()和read()函數(shù)太慢( OpenCV )
原文
dwiandhika提問于2021-01-22
python
opencv
optimization
我想循環(huán)某個范圍內(nèi)的幀,并將其附加到一個數(shù)組中。問題是,它太慢了。我已經(jīng)檢查了函數(shù)需要多長時間,我認(rèn)為這相當(dāng)慢。下面是我當(dāng)前的代碼:
imgs = []
for j in range(range1, range2):
video.set(cv.CAP_PROP_POS_FRAMES, j)
ret, frame = video.read()
imgs.append(frame)
?復(fù)制
我也嘗試過用video.retrieve(video.grab())替換imgs.append(frame),但性能并沒有太大差別。有沒有更好的解決方案/替代方案來完成這段代碼的工作?
瀏覽 72關(guān)注 0得票數(shù) 1
原文
2 個回答
操作
Ian Chu已采納
回答于2021-01-22
得票數(shù) 2
哦,哇,nvm。正是這個設(shè)置讓這個過程變得很慢:
內(nèi)部時間: 15.308052062988281
課外時間: 0.4459998607635498
import cv2
import time
def setInside(cap, start, end):
imgs = [];
for a in range(start, end):
cap.set(cv2.CAP_PROP_POS_FRAMES, a);
_, frame = cap.read();
imgs.append(frame);
def setOutside(cap, start, end):
imgs = [];
cap.set(cv2.CAP_PROP_POS_FRAMES, start);
for a in range(start, end):
_, frame = cap.read();
imgs.append(frame);
# open vidcap
cap = cv2.VideoCapture("202534.avi");
# bounds
start = 0;
end = 2000;
# time it
start_time = time.time();
setInside(cap, start, end);
print("Inside Time: " + str(time.time() - start_time));
start_time = time.time();
setOutside(cap, start, end);
print("Outside Time: " + str(time.time() - start_time));
?復(fù)制
如果你把set移到循環(huán)之前,速度會快很多。
好像沒有特別的叫法吧,也沒注意手冊上有什么特別的叫法,至于區(qū)別,舉個例子你就清楚了,如下:
假如有個列表aa=[1,4,3,5],對這個列表用sort()進(jìn)行排序,如果第一種方式aa.sort()后aa=[1,3,4,5];
而第二種方式sort(aa)排序后雖然得到了新列表[1,3,4,5],但是aa還是=[1,4,3,5]。
也就是說第一種方式會改變原列表,而第二種不會改變,只是得到了一個新的副本。
GOT IT?!^^
補(bǔ)充一下,如果非要說叫法上的區(qū)別的話,第一種叫做方法調(diào)用,第二種叫做函數(shù)調(diào)用。至于方法和函數(shù)的些微區(qū)別,方法是基于對象的,函數(shù)是基于本身的。如果再詳細(xì)……方法一般不可以單獨(dú)使用,因?yàn)榇蟛糠址椒ㄊ腔趯ο蟮模{(diào)用也必須基于對象,像上面第一種;而函數(shù)則可以單獨(dú)使用,你可以理解成它是數(shù)據(jù)系統(tǒng)本身的,而不是對象專有的。
PS:至于為什么我換了用sort()而沒有用LZ給的例子函數(shù),是因?yàn)?.…^o^……LZ第一種方式和第二種方式寫的都不是一個函數(shù)……
當(dāng)前文章:python函數(shù)調(diào)用慢 python運(yùn)行慢怎么辦
轉(zhuǎn)載源于:http://m.kartarina.com/article12/dodeddc.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供動態(tài)網(wǎng)站、外貿(mào)網(wǎng)站建設(shè)、建站公司、面包屑導(dǎo)航、App設(shè)計(jì)、網(wǎng)站內(nèi)鏈
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)