Python 学习 3:list 和 array.array 和 NumPy 和 SciPy 和 collections.deque 总结

Chapter 3: list 和 array.array 和 NumPy 和 SciPy 学习总结

list

python 里面最常用最方便的数组用法,省略用法介绍。

array.array

场景:

  1. 只包含数字的列表使用array.array 比list 更加高效
  2. array.array支持所有 list 的操作,外加了 .frombytes 和 .tofile 操作
  3. .frombytes 和 .tofile 操作 对于大量数据的数组的读写更加快速
  4. Python 数组跟 C 语言数组一样精简。创建数组需要一个类型码,这个类 型码用来表示在底层的 C 语言应该存放怎样的数据类型。比如 b 类型码 代表的是有符号的字符(signed char),因此 array(‘b’) 创建出的 数组就只能存放一个字节大小的整数,范围从 -128 到 127,这样在序列 很大的时候,我们能节省很多空间。而且 Python 不会允许你在数组里存 放除指定类型之外的数据。
>>> from array import array  
>>> from random import random 
>>> floats = array('d', (random() for i in range(10**7))) 
>>> floats[-1]
0.07802343889111107 
>>> fp = open('floats.bin', 'wb') 
>>> floats.tofile(fp)  
>>> fp.close() 
>>> floats2 = array('d')  
>>> fp = open('floats.bin', 'rb') 
>>> floats2.fromfile(fp, 10**7) 
>>> fp.close() 
>>> floats2[-1]  
0.07802343889111107 
>>> floats2 == floats  
True

NumPy SciPy

NumPy 二维数据操作

>>> import numpy 
>>> a = numpy.arange(12) 
>>> a 
array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]) 
>>> type(a)
<class 'numpy.ndarray'> 
>>> a.shape  
(12,) 
>>>> a.shape = 3, 4  
>>>> a 
array([[ 0, 1, 2, 3], 
		[ 4, 5, 6, 7], 
		[ 8, 9, 10, 11]]) 
>>> a[2]  
array([ 8, 9, 10, 11]) 
>>> a[2, 1]  
9 
>>> a[:, 1] 
>array([1, 5, 9]) 
>>> a.transpose() 
array([[ 0, 4, 8], 
		[ 1, 5, 9], 
		[ 2, 6, 10], 
		[ 3, 7, 11]])

SciPy(一知半解中)
Scipy 是一个用于数学、科学、工程领域的常用软件包,可以处理最优化、线性代数、积分、插值、拟合、特殊函数、快速傅里叶变换、信号处理、图像处理、常微分方程求解器等。 。

SciPy 包含的模块有最优化、线性代数、积分、插值、特殊函数、快速傅里叶变换、信号处理和图像处理、常微分方程求解和其他科学与工程中常用的计算。

NumPy 和 SciPy 的协同工作可以高效解决很多问题,在天文学、生物学、气象学和气候科学,以及材料科学等多个学科得到了广泛应用。

collections.deque

双向队列是可以从双向操作数组,比如我们想从数组头部pop数据。

>>> from collections import deque 
>>> dq = deque(range(10), maxlen=10)  
>>> dq 
deque([0, 1, 2, 3, 4, 5, 6, 7, 8, 9], maxlen=10) 
>>> dq.rotate(3)  
>>> dq 
deque([7, 8, 9, 0, 1, 2, 3, 4, 5, 6], maxlen=10) 
>>> dq.rotate(-4) 
>>> dq
deque([1, 2, 3, 4, 5, 6, 7, 8, 9, 0], maxlen=10) 
>>> dq.appendleft(-1)  
>>> dq 
deque([-1, 1, 2, 3, 4, 5, 6, 7, 8, 9], maxlen=10) 
>>> dq.extend([11, 22, 33])  
>>> dq 
deque([3, 4, 5, 6, 7, 8, 9, 11, 22, 33], maxlen=10) 
>>> dq.extendleft([10, 20, 30, 40])  
>>> dq
> deque([40, 30, 20, 10, 3, 4, 5, 6, 7, 8], maxlen=10)

queue

提供了同步(线程安全)类 Queue、LifoQueue 和 PriorityQueue,不同的线程可以利用这些数据类型来交换信息。这三 个类的构造方法都有一个可选参数 maxsize,它接收正整数作为输入 值,用来限定队列的大小。但是在满员的时候,这些类不会扔掉旧的元 素来腾出位置。相反,如果队列满了,它就会被锁住,直到另外的线程 移除了某个元素而腾出了位置。这一特性让这些类很适合用来控制活跃 线程的数量。

multiprocessing

这个包实现了自己的 Queue,它跟 queue.Queue 类似,是设计给 进程间通信用的。同时还有一个专门的 multiprocessing.JoinableQueue 类型,可以让任务管理变得更方 便。

asyncio

Python 3.4 新提供的包,里面有 Queue、LifoQueue、PriorityQueue 和 JoinableQueue,这些类受 到 queue 和 multiprocessing 模块的影响,但是为异步编程里的任务 管理提供了专门的便利。

heapq

跟上面三个模块不同的是,heapq 没有队列类,而是提供了 heappush 和 heappop 方法,让用户可以把可变序列当作堆队列或者优 先队列来使用。

参考文献

《流畅的Python》 © 2015 by Luciano Gama de Sousa Ramalho.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值