連接配接 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')
連接配接 NumPy 與 剩餘世界連接配接 NumPy 與 剩餘世界
連接配接 NumPy 與 剩餘世界連接配接 NumPy 與 剩餘世界 數組協定
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__': []}