天天看點

連接配接 NumPy 與 剩餘世界連接配接 NumPy 與 剩餘世界

連接配接 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__': []}