重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
因为程序陷入死循环了,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第一种方式和第二种方式写的都不是一个函数……