科學計算和可視化 Numpy與Matplotlib

 

Numpy與Matplotlibhtml

Numpy算法

numpy支持大量的維度數組和矩陣運算,對數組運算提供了大量的數學函數庫!數組

numpy比Python列表更具優點,其中一個優點即是速度。在對大型數組執行操做時,numpy的速度比Python列表的速度快了好幾百。由於numpy數組自己能節省內存,而且numpy在執行算術、統計和線性代數運算時採用了優化算法。數據結構

numpy的另外一個強大功能是具備能夠表示向量和矩陣的多維數組數據結構。numpy對矩陣運算進行了優化,使咱們可以高效地執行線性代數運算,使其很是適合解決機器學習問題。dom

與Python列表相比,numpy具備的另外一個強大優點是具備大量優化的內置數學函數。這些函數使你可以很是快速地進行各類複雜的數學計算,而且用到不多代碼(無需使用複雜的循環),使程序更容易讀懂和理解。機器學習

一、簡單建立數組函數

a = [1, 2, 3]
b = np.array(a)
c = np.array([[0, 1, 2, 10],
              [12, 13, 100, 101],
              [102, 110, 112, 113]], int)
print(c)
print(b)

二、建立隨機數組工具

array_rand = np.random.rand(10, 10, 4)
print(array_rand)
print(array_rand.ndim)

 3、數組的複製post

after_array = array_normal[:3, 2:4].copy()
copy_array = np.copy(array_normal[:, 2:4])

4、數組運算學習

# 循環數組行和列,每個數值都加5
score[:, :] = score[:, :]+5
print(score)
# 循環數組行和列,每個數值都減5
score[:, :] = score[:, :]-5
print(score)
# 循環數組行和列,每個數值都乘以5
score[:, :] = score[:, :]*5
print(score)
# 循環數組行和列,每個數值都除以5
score[:, :] = score[:, :]/5
print(score)
# 循環數組行和列,每個數值除以5取整
score[:, :] = score[:, :] // 5
print(score)
# 循環數組行和列,每個數值除以5取模
score[:, :] = score[:, :] % 5
print(score)

2、Matplotlib

Matplotlib 是Python中相似 MATLAB 的繪圖工具,熟悉 MATLAB 也能夠很快的上手 Matplotlib。

1matplotlib圖標正常顯示中文

import matplotlib.pyplot as plt
plt.rcParams['font.sas-serig']=['SimHei'] #用來正常顯示中文標籤
plt.rcParams['axes.unicode_minus']=False #用來正常顯示負號

2、爲項目設置matplotlib參數

配置文件包括如下配置項

axex: 設置座標軸邊界和表面的顏色、座標刻度值大小和網格的顯示
backend: 設置目標暑促TkAgg和GTKAgg
figure: 控制dpi、邊界顏色、圖形大小、和子區( subplot)設置
font: 字體集(font family)、字體大小和樣式設置
grid: 設置網格顏色和線性
legend: 設置圖例和其中的文本的顯示
line: 設置線條(顏色、線型、寬度等)和標記
patch: 是填充2D空間的圖形對象,如多邊形和圓。控制線寬、顏色和抗鋸齒設置等。
savefig: 能夠對保存的圖形進行單獨設置。例如,設置渲染的文件的背景爲白色。
verbose: 設置matplotlib在執行期間信息輸出,如silent、helpful、debug和debug-annoying。
xticks和yticks: 爲x,y軸的主刻度和次刻度設置顏色、大小、方向,以及標籤大小。

3顏色

能夠經過調用matplotlib.pyplot.colors()獲得matplotlib支持的全部顏色。

 

別名

顏色

別名

顏色

b

藍色

g

綠色

r

紅色

y

黃色

c

青色

k

黑色

 

m

洋紅色

w

白色

3、雷達圖

import numpy as np
import matplotlib.pyplot as plt
import matplotlib
matplotlib.rcParams['font.family']='SimHei'#方便中文可以顯示出來
matplotlib.rcParams['font.sans-serif']=['SimHei']
labels=np.array(['第一次做業','第二次做業','第三次做業','第四次做業','第五次做業','第六次做業'])#標籤名
nAttr=6#雷達圖中六邊形邊數
data = np.array([5,10,9,10,10,7])#雷達圖中標籤的數據值
angles = np.linspace(0,2*np.pi,nAttr,endpoint=False)#一哥標籤點到另外一個標籤點畫筆所需旋轉的角度值,取決於nAttr的大小
data = np.concatenate((data,[data[0]]))
angles = np.concatenate((angles,[angles[0]]))
fig = plt.figure(facecolor="white" )
plt.subplot(111,polar=True)
plt.plot(angles,data,'bo-',color='g',linewidth=2)#畫出雷達圖中不規則的六邊形
plt.fill(angles,data,facecolor='g',alpha=0.25)#填充半透明顏色,即不規則的六邊形顏色
plt.thetagrids(angles*180/np.pi,labels)#爲雷達圖設置標籤,就是labels裏的文字
plt.figtext(0.52,0.95,'em對的——成績表',ha='center')#命名雷達圖的名字
plt.grid(True)
plt.savefig('做業成績雷達圖.JPG')#保存雷達圖的圖片
plt.show()

效果以下圖所示

 

 4、手繪圖效果

 

from PIL import Image
import numpy as np
vec_el = np.pi/3.3# 光源的俯視角度,弧度值
vec_az = np.pi/9#光源的方位角度,弧度值
depth = 5#(0-100)值越大,總體畫面灰度值較深,有近似浮雕的效果;值越小,背景區域接近白色
im = Image.open('Wade.png').convert('L')
a = np.asarray(im).astype('float')
grad = np.gradient(a)#取圖像灰度的梯度值
grad_x,grad_y = grad#分別取橫縱圖像梯度值
grad_x = grad_x+depth/100.
gred_y = grad_y+depth/100.
dx = np.cos(vec_el)*np.cos(vec_az)#光源對x軸的影響
dy = np.cos(vec_el)*np.cos(vec_az)#光源對y軸的影響
dz = np.sin(vec_el)               #光源對z軸的影響
A = np.sqrt(grad_x**2+grad_y**2+1.)
uni_x = grad_x/A
uni_y = grad_y/A
uni_z = 1./A
a2 = 255*(dx*uni_x+dy*uni_y+dz*uni_z)#光源歸一化
a2 = a2.clip(0,255)#預防溢出0~255這個區間
im2 = Image.fromarray(a2.astype('uint8'))#重構圖像
im2.save('Wade6.png')

效果圖:

 

相關文章
相關標籤/搜索