NumPy Cookbook 带注释源码 四、连接 NumPy 与 剩余世界

# 来源:NumPy Cookbook 2e Ch4

使用缓冲区协议

# 协议在 Python 中相当于接口
# 是一种约束
import numpy as np 
import Image 
# from PIL import Image (Python 3) 
import scipy.misc

lena = scipy.misc.lena() 
# Lena 是 512x512 的灰度图像
# 创建与 Lena 宽高相同的 RGBA 图像,全黑色
data = np.zeros((lena.shape[0], lena.shape[1], 4), dtype=np.int8) 
# 将 data 的不透明度设置为 Lena 的灰度
data[:,:,3] = lena.copy() 

# 将 data 转成 RGBA 的图像格式,并保存
img = Image.frombuffer("RGBA", lena.shape, data, 'raw', "RGBA", 0, 1) 
img.save('lena_frombuffer.png')

# 每个像素都设为 #FC0000FF (红色)
data[:,:,3] = 255 
data[:,:,0] = 222 
img.save('lena_modified.png') 

数组协议

from __future__ import print_function 
import numpy as np 
import Image 
import scipy.misc

# 获取上一节的第一个图像
lena = scipy.misc.lena() 
data = np.zeros((lena.shape[0], lena.shape[1], 4), dtype=np.int8) 
data[:,:,3] = lena.copy() 
img = Image.frombuffer("RGBA", lena.shape, data, 'raw', "RGBA", 0, 1) 

# 获取数组接口(协议),实际上它是个字典
array_interface = img.__array_interface__ 
print("Keys", array_interface.keys())
print("Shape", array_interface['shape']) 
print("Typestr", array_interface['typestr'])
'''
Keys ['shape', 'data', 'typestr'] 
Shape (512, 512, 4) 
Typestr |u1 
'''

# 将图像由 PIL.Image 类型转换回 np.array
numpy_array = np.asarray(img) 
print("Shape", numpy_array.shape) 
print("Data type", numpy_array.dtype)
'''
Shape (512, 512, 4) 
Data type uint8
''' 

与 Matlab 和 Octave 交换数据

# 创建 0 ~ 6 的数组
a = np.arange(7) 
# 将 a 作为 array 保存在 a.mat 中
scipy.io.savemat("a.mat", {"array": a})
'''
octave-3.4.0:2> load a.mat 
octave-3.4.0:3> array 
array =
  0
  1
  ...
  6
'''

# 还可以再读取进来
mat = io.loadmat("a.mat")
print mat
# {'array': array([[0, 1, 2, 3, 4, 5, 6]]), '__version__': '1.0', '__header__': 'MATLAB 5.0 MAT-file Platform: nt, Created on: Sun Jun 11 18:48:29 2017', '__globals__': []}
NumPy Cookbook是一个针对NumPy库的实用指南,提供了一系列有关NumPy常用函数和技巧的案例示例。 这本书主要包含了以下几个方面的内容: 1. 数组的创建和操作:介绍了如何创建NumPy数组、改变数组的形状、轴和数据类型,以及利用广播功能对数组进行运算等。 2. 数组的索引和切片:详细说明了如何通过索引和切片操作数组的不同部分和元素,并进行常见的操作,如元素替换、添加、删除等。 3. 数组的数学运算:介绍了NumPy中的数学函数和运算符,如加法、减法、乘法、除法、平方、开方等,以及常见的统计计算,如均值、方差、标准差等。 4. 数组的排序和搜索:介绍了如何对数组进行排序操作,包括升序、降序和自定义排序规则,并介绍了常见的搜索算法,如二分查找和线性搜索等。 5. 数组的文件操作:讲解了如何将数组保存到文件中,并如何从文件中读取数组数据,以及如何处理包含缺失值的数据。 6. 高级技巧:介绍了NumPy中一些高级的数组操作技巧,如数组的重塑、合并和分割,以及数组的广播和矢量化计算等。 NumPy Cookbook以实例为基础,通过详细的代码示例和解释,帮助读者快速理解和掌握NumPy库的常用函数和技巧。无论是初学者还是有一定经验的科学计算开发者,都可以从中受益。它是学习和使用NumPy库的一本较为实用的参考书。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值