因為程序陷入死循環了,while x 0: 而你輸入的x始終是大于0的,就會一直持續不斷的運行下去,進而占用系統資源了。原因在于,你沒有終止while循環的條件,修改如下

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