numpy學習基礎篇(二)
阿新 • • 發佈:2018-11-21
影象操作
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)