主要內容:python
1 數據分析數組
a 概念: 是把隱藏在一些看似雜亂無章的數據背後信息提煉出來,總結出所研究對象的內在規律.dom
b 三劍客: Numpy Pandas Matplotlib函數
2 Numpy 是Python語言的一個擴展程序庫, 支持大量的緯度數組與矩陣運算,此外也針對數組運算提供大量的數字函數庫.spa
a ndarray的概念: ndarray 是一個多維的數組對象,具備矢量算術運算能力和複雜的廣播能力,並具備執行速度快和節省空間的特色。code
b ndarray的建立:對象
1) 使用np.array()建立: 最簡單的方法是使用 numpy 提供的 array() 函數直接將 Python 數組轉換爲 ndarray 數組,array() 接受一切序列類型的對象,例如將一個列表轉換成 ndarray 數組.blog
import numpy as np #一維數組的建立 np.array([1,2,3,4,5]) # 二維數組的建立 np.array([[1,2,3], [3, 4, 5]]) np.array([[1, 2, 3], ['a', 4, 5]]) #注意: 1 numpy默認ndarray的全部元素的類型是相同的 # 2 若是傳過來的列表包含不一樣的類型,則統一爲 # 統一類型,優先級: str > float > int
2) 使用matplotlib.pyplot獲取一個numpy數組, 數據來源於同一張圖片排序
import matplotlib.pyplot as plt img_arr = plt.imread('1.jpg') plt.imshow(img_arr) img_arr.shape
3) 使用np.ones方法建立 :np.ones(shape, dtype=None, order='C')
索引
np.ones(shape=(20, 30))
4) 使用np.full方法建立: np.full(shape, fill_value, dtype=None, order='C')
np.full(shape=(5,6), fill_value=100)
5) 使用np.linspace方法建立: np.linspace(start, stop, num=50, endpoint=True, retstep=False,dtype=None)等差數列
np.linspace(1, 100, num=20)
6) 使用np.arange方法建立: np.arange([start, ]stop, [step, ]dtype=None)
np.arange(0,100, step=2)
7) 使用np.random.randint(low, high=None, size=None, dtype='I')
np.random.seed(14) #固定時間種子,產生的隨機數就固定下來了 np.random.randint(0,100,size=(5,7))
8) 使用np.random.randn(d0,d1,d2....dn) 標準正態分佈
arr = np.random.randn(4,4)
9) 使用np.random.random(size=None) 生成0到1的隨機數, 左閉右開
np.random.random(size=(3, 4))
c : ndarray屬性
1) 4個必記的參數: ndim 維度; shape 形狀 ; size 總長度 ; dtype 元素類型
d : ndarray基本操做
1) 索引: 一維與列表徹底一致,多維時同理
2) 切片: 一維與列表徹底一致,多維時同理
# 左邊是行,右邊是列 arr = np.random.randint(60,120,size=(6,4)) # 獲取前兩行的數據 # arr[0:2] # 獲取二維數組的前2列 # arr[:, 0:2] # 獲取前兩行和前兩列的數據 # arr[0:2,0:2] # 將數據反轉 ::進行切片 # 將數組的行倒序 # arr[::-1] # 將數組的列倒序 # arr[:, ::-1] # 所有倒序 arr[::-1, ::-1]
3) 變形 : 使用arr.reshape()函數, 注意參數是一個tuple!基本使用:
將一維數組轉變爲多維數組
arr2 = np.random.randint(20,30, size=(6,4)) arr2 # 轉變爲一維數組 arr12 = arr2.reshape(24) arr12 # 轉變成三維數組 arr32 = arr2.reshape(2,4,3) arr32 # 自動計算行和列 arr4 = arr2.reshape(3,-1) arr4 arr5 = arr2.reshape(-1,6) arr5
4) 級聯 一維數組 二維數組 多維數組的級聯, 實際操做中級聯多爲二維數組
np.concatenate() axis=0表示的是豎直方向 1水平方向
arr1 = np.random.randint(0,100, size=(3,4)) arr2 = np.random.randint(0,100, size=(3,4)) np.concatenate((arr1,arr2), axis=1) 水平方向 np.concatenate((arr1,arr2), axis=0) 豎直方向
5) 切分: 與級聯相似, 三個函數完成切分工做: np.split(arr,行/列,軸): 參數2是一個列表類型 np.vsplit np.hsplit
import matplotlib.pyplot as plt img_arr = plt.imread('./1.jpg') plt.imshow(img_arr) imgs = np.split(img_arr,[100,300],axis=0) plt.imshow(imgs[1])
6) 副本: 全部賦值操做不會爲ndarray的任何元素建立副本, 對賦值後的對象的操做也會對原來的對象生效.
可以使用copy建立副本.
arr = np.array([1,2,3,4,5]) a = arr a[1] = 10 print(arr) arr1 = arr.copy() arr1[0] = 20
e : ndarray的聚合操做
arr.sum() arr.std() arr.mean()
f: 廣播機制
ndarray廣播機制的三條規則:
缺失維度的數組, 則維度補充爲進行運算的數組的維度.缺失的數組元素使用已有元素進行補充.
規則一: 爲缺失的維度補1
規則二: 缺失元素用已用值補充
規則三: 缺失維度的數組只能有一行或者是一列
例一: m = np.ones((2,3)) a = np.arange(3) 求m + a # 兩行三列的矩陣1 m = np.ones((2,3)) # 一維數組0,1,2 a = np.arange(3) m+a a = np.arange(3).reshape(3,1) b = np.arange(3) a+b 習題3 : a = np.ones((4,1)) b = np.arange(4) 求a+b a = np.ones((4,1)) b = np.arange(4) a+b
h : ndarray排序
# 1 快速排序np.sort()與ndarray.sort()均可以, 但有區別: # np.sort()不改變輸入 # ndarray.sort()本地處理, 不佔用空間, 但改變輸入. arr = np.array([3,8,5,7,6]) arr # 排序 np.sort(arr)
部分排序
2 部分排序 np.partition(a,k) 有的時候咱們不會對所有的數據感興趣, 咱們可能對最小的或者最大的一部分感興趣. 當k爲正時, 咱們想獲得最小的k個數 當k爲負時, 咱們想獲得最大的k個數 arr = np.array([1,2,3,4,5]) np.partition(arr, kth=4)