1. 程式人生 > >numpy學習基礎篇(二)

numpy學習基礎篇(二)

影象操作

SciPy提供了一些處理影象的函式。它可以將影象從磁碟讀入numpy陣列,將numpy陣列作為影象寫入磁碟以及調整影象大小的功能。

from scipy.misc import imread,imsave,imresize

img=imread("E:\\Desktop\\894487.jpg")      #讀取圖片
print(img.dtype,img.shape)
img_tinted=img=img*[1,1,1]    #用了廣播的方法,在影象的通道數這一維度進行了調整,三個通道分別對應紅,綠,藍
img_tinted=imresize(img_tinted,(500,500))  #將影象大小調整為500*500
imsave("E:/Desktop/8944871111.jpg",img_tinted)  #儲存圖片(路徑,圖片變數)

下圖為img_tinted=img=img*[0,0,1] 尺寸(500,500)的變換圖片

點之間的距離

SciPy定義了一下用於計算點集之間距離的有用函式。

函式scipy.spatial.distance.pdist計算給定集合中所有點對之間的距離:

from scipy.spatial.distance import pdist,squareform

x=np.array([[0,0],[0,1],[1,0],[1,1],[2,2]])
d=squareform(pdist(x,'euclidean'))  #euclidean表示歐式距離,不寫預設為歐式距離
print(d)

result:
[[0.         1.         1.         1.41421356 2.82842712]
 [1.         0.         1.41421356 1.         2.23606798]
 [1.         1.41421356 0.         1.         2.23606798]
 [1.41421356 1.         1.         0.         1.41421356]
 [2.82842712 2.23606798 2.23606798 1.41421356 0.        ]]

Matplotlib

Matplotlib中最重要的是plot,可以用來繪製2D影象:

import matplotlib.pyplot as plt
x=np.arange(0,3*np.pi,0.5)
y=np.sin(x)
plt.plot(x,y)
plt.show()

當然也可以在同一張圖中一次繪製多條曲線,新增相應標題、標籤。如上圖右圖所示。

import matplotlib.pyplot as plt

x=np.arange(0,3*np.pi,0.1)        #x的範圍從0-3pi,間隔0.1長度讀取元素。
y_sin=np.sin(x)
y_cos=np.cos(x)                    #設定變數
plt.plot(x,y_sin)
plt.plot(x,y_cos)
plt.plot(x,y_cos+y_sin)            #劃線
plt.xlabel("x axis label")        #x軸資訊
plt.ylabel("y axis label")        #y軸資訊
plt.title("sin and cos and sum")    #標題欄
plt.legend(['sin','cos','sum'])    #標籤欄
plt.show()              #展示圖片

子圖

可以使用subplot函式在同一個圖中繪製不同的東西。

#plt.subplot(x,y,z)  原圖可容納x*y個子圖,這是第z個圖,子圖表現形式為x行y列,共x*y個

import matplotlib.pyplot as plt
x=np.arange(0,3*np.pi,0.1)
y_sin=np.sin(x)
y_cos=np.cos(x)
plt.subplot(3,2,1)   #建立子圖(3,2,1)  原圖可容納6個子圖,這是第1個圖
plt.plot(x,y_sin)
plt.title("sin")
plt.subplot(3,2,2)   #建立子圖(3,2,2)  原圖可容納6個子圖,這是第2個圖
plt.plot(x,y_cos)
plt.title("cos")
plt.subplot(3,2,6)
plt.plot(x,y_cos)
plt.title("cos")
plt.show()

載入圖片

你可以使用imshow函式來顯示一張圖片。

import matplotlib.pyplot as plt
from scipy.misc import imread,imresize

img=imread("E:\\Desktop\\894487.jpg")
img_tined=img*[1,0,0]
plt.subplot(1,2,1)
plt.imshow(img)
plt.subplot(1,2,2)
plt.imshow(img_tined)
plt.show()

用numpy求解方程組

線性代數比較常見的問題是求解矩陣向量方程。形如 Ax b

如A為一個3*3的矩陣,b為3*1的向量。

A=np.array([[2,1,-2],[3,0,1],[1,1,-1]])
b=np.transpose(np.array([-3,2,-2]))
x=np.linalg.solve(A,b)     #求解方程組
print(x)