科學計算和可視化 Numpy與Matplotlib

1、Numpyhtml

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

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

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

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

一、簡單建立數組dom

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、數組的複製函數

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、Matplotlibpost

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

Matplotlib 是一個 Python 2D繪圖庫,它以各類硬拷貝格式和跨平臺的交互式環境生成出版質量級別的圖形   

經過 Matplotlib,開發者能夠僅須要幾行代碼,即可以生成繪圖,直方圖,功率譜,條形圖,錯誤圖,散點圖等。

matplotlib圖標正常顯示中文

爲了在圖表中可以顯示中文和負號等,須要下面一段設置:

import matplotlib.pyplot as plt

plt.rcParams['font.sas-serig']=['SimHei'] #用來正常顯示中文標籤

plt.rcParams['axes.unicode_minus']=False #用來正常顯示負號

pyplot文本顯示函數

plt.xlabel():對x軸增長文本標籤

plt.ylabel():同理

plt.title(): 對圖形總體增長文本標籤

plt.text(): 在任意位置增長文本

plt. annotate(s, xy = arrow_crd, xytext = text_crd, arrowprops = dict)

Plot的圖表函數

plt.plot(x,y , fmt)  :繪製座標圖

 

plt.boxplot(data, notch, position): 繪製箱形圖

 

plt.bar(left, height, width, bottom) : 繪製條形圖

 

plt.barh(width, bottom, left, height) : 繪製橫向條形圖

 

plt.polar(theta, r) : 繪製極座標圖

 

plt.pie(data, explode) : 繪製餅圖

 

plt.scatter(x, y) :繪製散點圖

 

plt.hist(x, bings, normed) : 繪製直方圖

Python成績雷達圖

代碼以下

 

# -*- coding: utf-8 -*-
"""
Spyder Editor

This is a temporary script file.
"""
#e19.DrawDotaRadar.py
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=7
data=np.array([50,92,92,100,92,89,90])
angles=np.linspace(0,2*np.pi,nAttr,endpoint=False)
data=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)
plt.figtext(0.25,0.95,'foldline的成績',ha='center')
plt.grid(True)
plt.show()

 

效果圖以下

手繪圖效果

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('D:\Anaconda\Koala.jpg').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('D:\Anaconda\Koala.jpg')

  效果圖以下

 

相關文章
相關標籤/搜索