NumPyCookbook帶註釋原始碼四、連線NumPy與剩餘世界

apachecn_飛龍發表於2017-06-12
版權宣告:License CC BY-NC-SA 4.0 https://blog.csdn.net/wizardforcel/article/details/73087531
# 來源: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__`: []}


相關文章