重庆分公司,新征程启航

为企业提供网站建设、域名注册、服务器等服务

python的速度函数,易语言和python的运算速度

Python的各种imread函数在实现方式和读取速度上有何区别

1. PIL.Image.open

创新互联公司专注于企业营销型网站、网站重做改版、邓州网站定制设计、自适应品牌网站建设、HTML5商城系统网站开发、集团公司官网建设、外贸网站制作、高端网站制作、响应式网页设计等建站业务,价格优惠性价比高,为邓州等各大城市提供网站开发制作服务。

代码在这里:Pillow/Image.py at 3.1.x · python-pillow/Pillow · GitHub

open() 函数打开图像,但并不读入,直到有操作发生。

具体的读取操作是在 ImageFile.py 写的。大体流程是先检测文件类型,整块地读入文件内容,然后调用解码器解码,做了很多优化,效率应该还是很高的。

2. scipy.ndimage.imread

代码在这里:scipy/io.py at v0.17.1 · scipy/scipy · GitHub

imread 调用 scipy.misc.pilutil.imread。从名字就能看出来其实调用的还是 Pillow。

根据 pilutil 代码:scipy/pilutil.py at v0.17.1 · scipy/scipy · GitHub

确实是调用 pil.image.open(),然后返回一个 fromimage()。

3. scipy.misc.imread

misc 的 __init__.py 在这里:scipy/__init__.py at v0.17.1 · scipy/scipy · GitHub

调用的还是 pilutil 中的 imread

相关代码如下

try:

from .pilutil import *

from . import pilutil

__all__ += pilutil.__all__

del pilutil

except ImportError:

pass

也算是学了一招,从 pilutil 导入其所有函数添加到当前空间,然后又删除了 pilutil 消除影响。

4. skimage.io.imread

代码在这里:scikit-image/_io.py at master · scikit-image/scikit-image · GitHub

是通过插件 plugin 来读入不同的文件,而且会试用几个不同的 plugins 来找到合适的。

使用 call_plugin 来调用,代码在这里:scikit-image/manage_plugins.py at master · scikit-image/scikit-image · GitHub

可以根据如下代码查看插件调用的优先级

# For each plugin type, default to the first available plugin as defined by

# the following preferences.

preferred_plugins = {

# Default plugins for all types (overridden by specific types below).

'all': ['pil', 'matplotlib', 'qt', 'freeimage'],

'imshow': ['matplotlib'],

'imshow_collection': ['matplotlib']

}

plugins 的源代码在这里:scikit-image/skimage/io/_plugins at master · scikit-image/scikit-image · GitHub。可以看到 pil 的 imread,是用 open 打开图像之后,再转换成 ndarray。

5. cv2.imread

这里是调用的 CV::imread(),代码在这里:opencv/loadsave.cpp at master · opencv/opencv · GitHub。一般来说 C\C++ 的实现,应该比 python 速度快一点。

6. matplotlib.image.imread

matplotlib 的文档里面说,matplotlib 原生只可以读取 PNG 文件,有 PIL 的时候,可以读取其他类型的文件。如果使用 URL 打开在线图像文件,需要符合 PIL 的文档要求。

matplotlib.image.imread 的代码在这里:matplotlib/image.py at master · matplotlib/matplotlib · GitHub。matplotlib 的原生 PNG 读取和写入,是用 C 实现的,代码在这里:matplotlib/_png.cpp at master · matplotlib/matplotlib · GitHub。

matplotlib 是先用 pil 的 open 打开图像,如果格式是 png,就用原生方法打开。相关代码如下:

handlers = {'png': _png.read_png, }

if format is None:

if cbook.is_string_like(fname):

parsed = urlparse(fname)

# If the string is a URL, assume png

if len(parsed.scheme) 1:

ext = 'png'

else:

basename, ext = os.path.splitext(fname)

ext = ext.lower()[1:]

elif hasattr(fname, 'name'):

basename, ext = os.path.splitext(fname.name)

ext = ext.lower()[1:]

else:

ext = 'png'

else:

ext = format

if ext not in handlers:

im = pilread(fname)

if im is None:

raise ValueError('Only know how to handle extensions: %s; '

'with Pillow installed matplotlib can handle '

'more images' % list(six.iterkeys(handlers)))

return im

声明的处理器只有 png。如果是 png 文件,调用 _png.read_png。如果不是 png 直接使用 pilread(就是用 pil 的 Image.open 然后 pil_to_array)。

matplotlib 的源码确实比较复杂,一大部分主体是用 C 写的,改动很激进,功能更新猛烈。

Python的函数都有哪些

【常见的内置函数】

1、enumerate(iterable,start=0)

是python的内置函数,是枚举、列举的意思,对于一个可迭代的(iterable)/可遍历的对象(如列表、字符串),enumerate将其组成一个索引序列,利用它可以同时获得索引和值。

2、zip(*iterables,strict=False)

用于将可迭代的对象作为参数,将对象中对应的元素打包成一个个元组,然后返回由这些元组组成的列表。如果各个迭代器的元素个数不一致,则返回列表长度与最短的对象相同,利用*号操作符,可以将元组解压为列表。

3、filter(function,iterable)

filter是将一个序列进行过滤,返回迭代器的对象,去除不满足条件的序列。

4、isinstance(object,classinfo)

是用来判断某一个变量或者是对象是不是属于某种类型的一个函数,如果参数object是classinfo的实例,或者object是classinfo类的子类的一个实例,

返回True。如果object不是一个给定类型的的对象, 则返回结果总是False

5、eval(expression[,globals[,locals]])

用来将字符串str当成有效的表达式来求值并返回计算结果,表达式解析参数expression并作为Python表达式进行求值(从技术上说是一个条件列表),采用globals和locals字典作为全局和局部命名空间。

【常用的句式】

1、format字符串格式化

format把字符串当成一个模板,通过传入的参数进行格式化,非常实用且强大。

2、连接字符串

常使用+连接两个字符串。

3、if...else条件语句

Python条件语句是通过一条或多条语句的执行结果(True或者False)来决定执行的代码块。其中if...else语句用来执行需要判断的情形。

4、for...in、while循环语句

循环语句就是遍历一个序列,循环去执行某个操作,Python中的循环语句有for和while。

5、import导入其他脚本的功能

有时需要使用另一个python文件中的脚本,这其实很简单,就像使用import关键字导入任何模块一样。

对于Python 的科学计算有哪些提高运算速度的技

一:学会正确使用numpy scipy。 numpy scipy写好的绝不自己写,比如矩阵运算等操作,pylab的实现还算不错。各种函数都有,尽量使用他们可以避免初学者大部分的速度不足问题。因为这些函数大部分都是预编译好的。

根据我几年前的测试,python的矩阵运算速度并不慢,(因为你运行的是动态链接库里面的函数而不是脚本)比mathematica快,和matlab持平。

大部分新手不擅长看文档啥都自己造轮子是不好的。当然老手把效率写的比开源库高也不算啥新闻,毕竟有对特定程序的优化

二:减少for的使用,多使用向量化函数,np.vectorlize可以把函数变成对数组逐元素的操作,比for效率高几个华莱士。

三:对内存友好,操作大矩阵的时候减少会引起整矩阵对此copy的操作

四:系统最慢的大部分时候是io,包括上面说的内存操作和频繁的读入读出以及debug输出。避免他们,在需要实时处理的时候引入类似于gpu的pipeline管线机制或者使用灵活的多线程编程可以起到奇效。

五:matplotlib的绘图效率并不高明,在使用交互绘图(plt.ion)的时候减少不必要的刷新率。


分享名称:python的速度函数,易语言和python的运算速度
URL网址:http://cqcxhl.com/article/hcggjd.html

其他资讯

在线咨询
服务热线
服务热线:028-86922220
TOP