一、numpy和matplotlib庫的學習筆記 (1)numpy庫 1,從數值範圍創建數組 1 numpy.arange(start, stop, step, dtype)#參數分別為起始值,終止值,步長和數據類型 2.創建等間隔一位數組 1 np.linspace(start, stop, nu ...
一、numpy和matplotlib庫的學習筆記
(1)numpy庫
1,從數值範圍創建數組
1 numpy.arange(start, stop, step, dtype)#參數分別為起始值,終止值,步長和數據類型
2.創建等間隔一位數組
1 np.linspace(start, stop, num=50, endpoint=True, retstep=False, dtype=None)#參數分別為起始值,終止值,數據數,是否包含stop值,是否顯示間距和數據類型
3.使用數字 0 將一個全為 1 的 5x5 二維數組包圍
1 Z = np.ones((5,5)) 2 Z = np.pad(Z, pad_width=1, mode='constant', constant_values=0)
4.創建一個 5x5 的二維數組,並設置值 1, 2, 3, 4 落在其對角線下方Z = np.diag(1+np.arange(4),k=-1)
5.創建一個 10x10 的二維數組,並使得 1 和 0 沿對角線間隔放置
1 Z = np.zeros((10,10),dtype=int)
2 Z[1::2,::2] = 1
3 Z[::2,1::2] = 1
6.創建一個 0-10 的一維數組,並將 (1, 9] 之間的數全部反轉成負數
1 Z = np.arange(11)
2 Z[(1 < Z) & (Z <= 9)] *= -1
7.找出兩個一維數組中相同的元素
1 Z1 = np.random.randint(0,10,10) 2 Z2 = np.random.randint(0,10,10) 3 print("Z1:", Z1) 4 print("Z2:", Z2) 5 np.intersect1d(Z1,Z2)
8.返回每行,列最大值
1 np.argmax(a, axis=0) #行最小值是argmin函數
2 np.max(a, axis=0) #列最大值
9..使用 NumPy 列印昨天、今天、明天的日期
1 yesterday = np.datetime64('today', 'D') - np.timedelta64(1, 'D') 2 today = np.datetime64('today', 'D') 3 tomorrow = np.datetime64('today', 'D') + np.timedelta64(1, 'D') 4 print("yesterday: ", yesterday) 5 print("today: ", today) 6 print("tomorrow: ", tomorrow)
10.幾個常用的函數
1 flat #返回 2 3 np.nonzero([1,0,2,0,1,0,4,0])#返回一維數組中非 0 元素的位置索引 4 5 np.dot(A, B)#矩陣相乘 6 7 np.power(x,4)#對x數組的每個值4次方 8 9 np.set_printoptions(precision=2)#對於二維隨機數組中各元素,保留其 2 位小數 10 11 Z/1e3#科學記數法輸出 NumPy(Z) 數組 12 13 a.argsort()#列印各元素在數組中升序排列的索引 14 15 a.real #屬性,數組a的實部 16 a.imag #屬性,數組a的虛部 17 18 numpy.linalg.inv()# 函數計算矩陣的乘法逆矩陣。 19 20 numpy.linalg.solve() #函數給出了矩陣形式的線性方程的解。 21 22 umpy.matlib.eye() #函數返回一個矩陣,對角線元素為 1,其他位置為零。 23 24 np.c_[M1, M2]#按列連接兩個數組 25 np.r_[M1, M2]#按行連接兩個數組
(2)matplotlib庫
Python 中可以用 matplotlib 庫實現數據的可視化,以下是 matpltlib 庫的一些介紹:
1、 matplotlib.pyplot 模塊可以畫折線圖,分為兩個步驟,分別是 pyplot.plot() 和 pyplot.show() ,前者負責畫圖,後者將畫好的圖展示出來。
2、 pyplot.plot( Series1 , Series2 ) 以 Series1 作為橫坐標, Series2 作為縱坐標畫出折線圖;
3、 在執行 2 中的函數後,可以使用 pyplot.xticks( rotation = 45 ) 將 x 軸的坐標顯示逆時針旋轉 45 ° ,預設為 0 °,也就是水平的,同理,可以用 pyplot.yticks( rotation = 45 ) 對 y 軸坐標做同樣的操作。
4、 可以使用 pyplot.xlabel( str ) 將 x 軸命名為 str 的值,同理可以用 pyplot.ylabel( str ) 將 y 軸命名為 str 的值。
5、 可以使用 pyplot.title( str ) 為畫出的折線圖命名。
6、 fig = pyplot.figure() 指出預設畫圖區間。
7、 fig.add_subplot( 3 , 2 , 1 ) 在畫圖區間中添加子圖,位置為,將畫圖區間分為三行兩列的六塊中的第一塊,這裡數的順序為,從左往右,從上到下,按照此邏輯, ( 3 , 2 , 1 ) 所在的位置為第一行最左邊, ( 3 , 2 , 3 ) 的位置為第二行左邊,( 3 , 2 , 6 ) 的位置為第三行最右邊。
8、pyplot.figure( figsize = ( 3 , 6 ) )
指定畫圖的區域為 長為 3 , 寬為 6 的大小。
9、 pyplot.plot( x , y , c = 'red' , label = ' 250 ' )
c 指定這一條線為紅色,這裡可以用顏色的英文名,也可以用顏色代號,那個 # 什麼的;
label 指定這條線的名字為 250.
10、 pyplot.legend( loc = 'best' )
將所有線的名字與線的對照框放到最適合的位置, loc 還可以設置為別的參數。
11、 ax = pyplot.subplots()
構建一個 pyplot 的子圖對象。
12、 ax.bar( list1 , list2 , 0.5 )
list1 為條形圖各個條距離遠點的長度, list2 為條形圖中條的高度, 0.5 為條的寬度,通過這三個數據確定圖形的形狀。
13、 ax.set_xticks( list )
設置 X 軸的坐標長度和標號,對於 y 軸也有對應函數實現此功能。
14、 ax.set_xticklabels( list )
設置 x 軸的坐標名,對於 y 軸也有對應函數實現此功能。
15、ax.set_xlabel( str )
設置 x 軸的名稱,對於 y 軸也有對應函數實現此功能。
16、 ax.set_title( str )
設置圖標的名稱。
17、 ax.barh( list1 , list2 , 0.5 )
畫水平的柱形圖,其他函數一樣, x 、 y 軸做對應轉換。
18、 ax.scatter( list1 , list2 )
畫散點圖。
19、 ax.hist( array , range ,bins )
畫柱形圖, array 中的數值作為橫軸的值,縱軸計算數值出現的次數, range 表示數值顯示的範圍, bins 表示總的顯示柱的個數(控制間距)。
20、 ax.set_ylim( 0 , 50 )
設置縱軸的顯示範圍為 0 到 50 。
21、 ax.boxplot( Series )
畫箱線圖(還沒搞明白箱線圖是個什麼玩意兒)。
22、 ax.boxplot( Series[ list ].value )
畫 好幾個箱線圖。
23、 ax.tick_params( bottom = False , top = False , left = False , right = False )
設置圖形框四邊,是否顯示刻度。
24、
for key,spine in ax.spines.items():
spine.set_visible(False)
隱藏圖形框的四條邊框線。
25、 pyplot.legend()
只對上一個畫出的圖有效,所以如果每個子圖都要這個的話,就得在畫下一個之前調用。
分類變數繪圖
1 import matplotlib.pyplot as plt 2 names = ['group_a', 'group_b', 'group_c'] 3 values = [1, 10, 100] 4 5 plt.figure(1, figsize=(9, 3)) 6 7 plt.subplot(131) 8 plt.bar(names, values) 9 plt.subplot(132) 10 plt.scatter(names, values) 11 plt.subplot(133) 12 plt.plot(names, values) 13 plt.suptitle('Categorical Plotting') 14 plt.show()
二、雷達圖
Python123作業的成績
1 #-*- coding:utf-8 -*- 2 ''' 3 Author: 一枚小可愛 4 Mail:[email protected] 5 6 ''' 7 import numpy as np 8 import matplotlib.pyplot as plt 9 10 #標簽 11 labels = np.array(['第一周','第二周','第三周','第四周','第五周','第六周']) 12 #數據個數 13 dataLenth = 6 14 #數據 15 data = np.array([5.0,9.1,9.8,9.0,9.7,8.8]) 16 17 angles = np.linspace(0, 2*np.pi, dataLenth, endpoint=False) 18 data = np.concatenate((data, [data[0]])) # 閉合 # #將數據結合起來 19 angles = np.concatenate((angles, [angles[0]])) # 閉合 20 21 fig = plt.figure() 22 ax = fig.add_subplot(121, polar=True)# polar參數!!代表畫圓形!!!! 23 #111代表總行數總列數位置 24 ax.plot(angles, data, 'bo-', linewidth=1)# 畫線四個參數為x,y,標記和顏色,閑的寬度 25 ax.fill(angles, data, facecolor='r', alpha=0.1)# 填充顏色和透明度 26 ax.set_thetagrids(angles * 180/np.pi, labels, fontproperties="SimHei") 27 ax.set_title("一枚小可愛的成績表\n2018310143108", va='baseline', fontproperties="SimHei") 28 29 ax.set_rlim(0,10) 30 ax.grid(True) 31 plt.show()
顯示如下:
三、自定義手繪風
1 from PIL import Image 2 #image 是 PIL庫中代表一個圖像的類 3 import numpy as np 4 5 #打開一張圖片 “F:\PycharmProjects\cui.jpg” 是圖片位置 6 a = np.asarray(Image.open('D:\\我的文件\\Python\\壁紙4.jpg') 7 .convert('L')).astype('float') 8 9 10 depth = 10. #浮點數,預設深度值為10 11 grad = np.gradient(a) #取圖像灰度的梯度值 12 grad_x,grad_y = grad #分別取橫縱圖像的梯度值 13 grad_x = grad_x*depth/100. #根據深度調整 x 和 y 方向的梯度值 14 grad_y = grad_y*depth/100. 15 A = np.sqrt(grad_x**2 + grad_y**2 +1.) #構造x和y軸梯度的三維歸一化單位坐標系 16 uni_x = grad_x/A 17 uni_y = grad_y/A 18 uni_z = 1./A 19 20 vec_el = np.pi/2.2 #光源的俯視角度,弧度值 21 vec_az = np.pi/4. #光源的方位角度,弧度值 22 dx = np.cos(vec_el)*np.cos(vec_az) #光源對 x 軸的影響,np.cos(vec_el)為單位光線在地平面上的投影長度 23 dy = np.cos(vec_el)*np.sin(vec_az) #光源對 y 軸的影響 24 dz = np.sin(vec_el) #光源對 z 軸的影響 25 26 b = 255*(dx*uni_x + dy*uni_y + dz*uni_z) #梯度與光源相互作用,將梯度轉化為灰度 27 b = b.clip(0,255) #為避免數據越界,將生成的灰度值裁剪至0‐255區間 28 29 im = Image.fromarray(b.astype('uint8')) #重構圖像 30 im.save("D:\\我的文件\\Python\\壁紙9.jpg") #保存圖片的地址
前後對比:
四、數學規律
題目:|x| + |y| = 1
1 import numpy as np 2 import matplotlib.pyplot as plt 3 4 x = np.arange(-1.1, 1.1, .01) 5 y = np.arange(-1.1, 1.1, .01) 6 x, y = np.meshgrid(x, y) 7 8 f = np.abs(x) + np.abs(y) - 1 9 plt.figure() 10 plt.contour(x, y, f, 0,) 11 plt.title(r'$\left|x\right|+\left|y\right|=1$') 12 plt.show()
圖如下: