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

作者&投稿:老晓 (若有异议请与网页底部的电邮联系)
Python的各种imread函数在实现方式和读取速度上有何区别~

1。 在数据获取方面强烈推荐使用TuShare
2。 在我们A股推荐成熟的pyalgotrade
3。测试策略 如:Ricequant
4。恒生的python-恒生量化社区
5。python的量化回测框架 QuantDigger

1。 在数据获取方面强烈推荐使用TuShare 2。 在我们A股推荐成熟的pyalgotrade 3。测试策略 如:Ricequant 4。恒生的python-恒生量化社区 5。python的量化回测框架 QuantDigger

1. PIL.Image.open

代码在这里: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格式控制s,i,f的作用
1、s,用于字符串类型的格式控制。格式化输出字符串类型的数据。示例,print("Mynameis%s."%"Alice")输出结果为,MynameisAlice。2、i,用于整数类型的格式控制。格式化输出整数类型的数据。示例,print("Ihave%iapples."%3)输出结果为,Ihave3apples。3、f,用于浮点数类型的格式控制。格式化输出浮点数...

python的python -i
python -i 是在命令行中执行Python解释器并打开交互式模式的命令。在使用该命令后,会进入交互式模式,可以直接在命令行中输入Python代码,并立即执行。下面是一个简单的示例:创建一个Python文件,命名为example.py,包含以下内容:def add(a, b):return a + b result = add(1, 2)print(result)打...

Python中的几种数据类型
1、数字--int类当然对于数字,Python的数字类型有int整型、long长整型、float浮点数、complex复数、以及布尔值,这里只针对int整型进行介绍。在python2中,整数的大小是有限制的,即当数字超过一定的范围不再是int类型,而是long长整型,而在python3中,无论整数的大小长度为多少,统称为整型int。2、布尔值--bool类对于布尔...

Python,for i in range(5): 这个i代表什么? 是不是相当于赋值 。_百 ...
差不多相当于赋值,i属于局部变量,在for循环内有效,每次循环从range(5)里取值。操作方法如下:1、首先新建一个空白的PYTHON文档。2、range(1, 5)表示1到4的值,注意不包括5。for i in range(1,5):print(i)。3、range里只有一个数值,表示从零开始到这个数值-1的数字。4、这样可以表示间隔...

python中turtle里的i%6是什么是什么意思?
在 Python 的 Turtle 模块中,i%6 通常出现在循环语句中,例如 for 或 while 循环,并且通常用于在绘图时循环执行一系列命令。具体来说,i 是一个计数器变量,% 是取模运算符,用于计算 i 除以 6 的余数。在绘图应用中,i%6 的作用是循环执行一系列命令,这些命令通常用于绘制图形。例如,可以...

python中的row[i]是什么意思
表示列表(List)或元组(Tuple)row的第i+1个元素。i是从0开始计数的,即row[0]代表了row列表(或元组)的第1个元素(第一个是0),row[1]代表了第2个元素,以此类推。

Python 中 for i in range()中 i 有什么意义,什么意思
i表示遍历了一个循环中的所有元素 i只是习惯性写法,你写成a\/b\/c\/d任何名称都可以 但在没有具体对象的时候,一般统一用i

python里i和res怎么理解?求教一个简单code
i和 res 就是2个变量名, res += i 就是 res= res+i,你的函数没有返回值,还有缩进看是否正确。

python for i in range中的i是一个数吗
意思是将in后面的条件值每次一个传递给变量i for i in range(10) print(i)range是个函数,括号里的10意思是从1到10,默认初始值1不用写。结束值为10 打印一下i你就知道是怎么回事儿了

python的{i:03}是什么意思
[:3]在python中是一个序列,表示获取一个序列开头到索引值为3(不含)的元素之间这段范围的序列。这种表示方式在Python中称为序列的切片。

翼城县15652335395: Python的各种imread函数在实现方式和读取速度上有何区别 -
封竖六味: 一看到题主的问题,其实就有个猜想,其实底层应该都是一样的,或者说没几个独立的实现吧?主要是关注开源软件一段时间之后,就会发现开源界其实挺缺人的,现有这些人也都挺懒的.挖坑的人多,填坑的人少.说是这活谁都可以参与,但...

翼城县15652335395: python的opencv,如何用imread读取视频的每一帧 -
封竖六味: 1:可以使用opencv读取.2:其代码如下:#includehighgui.h#includecv.h//从摄像头中读入数据 int main(int argc,char** argv) { cvNamedWindow(Example1,CV_WINDOW_AUTOSIZE); CvCapture* capture; //初始化一个CvCapture结构的指针 if(...

翼城县15652335395: 怎么用python opencv2选取图像中的一块区域 -
封竖六味: import cv2 #导入opencv模块 importnumpy asnp #导入numpy模块并改名字为np方便调用 def salt(img, n): #定义函数,给图像随机加白点(输入图像,白点数) for k in range(n): #从k=0到k=n,默认以步长1 i = int(np.random.random()* img....

翼城县15652335395: python对图像进行分类,为什么要把图像数组转换为向量 -
封竖六味: 可以使用scipy包中的imread函数.SciPy是一款方便、易于使用、专为科学和工程设计的Python工具包. imread接收图片的完整路径为参数,也可以是文件指针,返回numpy.ndarray类型的矩阵.示例代码如下:from scipy.misc import imreadimg = imread('meelo.jpg')print(img.shape)# (600, 1000, 3)

翼城县15652335395: python怎么实现文件格式的转换 -
封竖六味: 1. 如果是文档类转换的话, 可以借助 pypandoc模块(pip install pypandoc) import pypandoc out = pypandoc.convert_file('a.txt', 'docx', outputfile = 'a.docx') # 转为docx2. 如果是图片或者视频类的转化的话, 可以使用 opencv import cv2 img = cv2.imread('a.jpg') out = cv2.imwrite('a.png', img) # jpg转png

翼城县15652335395: 用imread读出一组图的数据 -
封竖六味: 我用的imread的循环语这个语句读取的图像I=cell(1,19); for b=1:19 m1=imread(['C:\Documents and Settings\Administrator\桌面\B\附件1\',int2str(b),'.bmp']); I{b}=m1;end

翼城县15652335395: 如何用python读取文本中指定行的内容 -
封竖六味: 1 利用python的readlines()函数: [python] view plain copy<strong><span style="font-size:24px;"> </span><span style="font-size:14px;">fobj = open(r'Ori.Data.txt','r') for line in fobj.readlines()[1000:] fobj.close()</span></strong> 2 利用 ...

翼城县15652335395: 编程序,将当前目录中的a1.bmp, …, a9.bmp读入变量空间,并将各变量保存在变量空间,调用命令I = imread( -
封竖六味: a=[imread('a1.amp') imread('a2.amp') imread('a3.amp') imread('a4.amp') imread('a5.amp') imread('a6.amp') imread('a7.amp') imread('a8.amp') imread('a9.amp')]

翼城县15652335395: 怎样用python,读取excel中的一列数据 -
封竖六味: 就是把xls or xlsx另存为CSV格式,然后再检索.代码如下,抛砖引玉.# -*- coding: cp936 -*- import linecache o=open('d:\\test\\14.csv')#文件路径 o.seek(0) r=o.readlines() s1=str(input('输入要定位的信息:')) a=0 count=0 for i in r: #按和值组合...

翼城县15652335395: Python初学者基础之如何读取文件格式 -
封竖六味: Python最主要的应用就是爬虫,即自动获取网页内容的程序.文件是网页内容的重要存储模式,如何利用Python读取文件呢?今天千锋老师就来给大家分享一下Python初学者教程中关于读取文件的有关知识.大局部爬虫一般按照“发送恳求——取得页面——解析页面——抽取并贮存内容”的流程,想要读取信息,我们就要了解数据的存储方式,其中文件格式是比较常见的一种.所谓文件格式,是指文件中存储信息的一种标准方法.首先,文件格式指定文件是一个二进制或ASCII文件.其次,文件展示了文件的组织形式,如CSV、XLSX等.

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网