jupter nootbok 快捷鍵、NumPy模塊初識
阿新 • • 發佈:2019-02-16
數組運算 imu nim function head point 操作 spl 水平
jupter nootbok 快捷鍵
插入cell:a b 刪除cell:x cell模式的切換:m:Markdown模式 y:code模式 運行cell:shift+enter tab:補全 shift+tab:打開幫助文檔
NumPy
NumPy(Numerical Python) 是 Python 語言的一個擴展程序庫,支持大量的維度數組與矩陣運算,此外也針對數組運算提供大量的數學函數庫。
一、創建ndarray
1. 使用np.array()創建 一維數據創建 import numpy as np np.array([1,2,3,4,5],dtype=int) 二維數組創建 np.array([[1,2,3],[4,5,6],[7.7,8,9]])
註意:
numpy默認ndarray的所有元素的類型是相同的
如果傳進來的列表中包含不同的類型,則統一為同一類型,優先級:str>float>int
使用matplotlib.pyplot獲取一個numpy數組,數據來源於一張圖片
import matplotlib.pyplot as plt img_arr = plt.imread(‘bobo.jpg‘)#當前目錄下的圖片 plt.imshow(img_arr) img.shape #(626, 413, 3)#前面兩個數字表示像素,最後一個表示顏色
使用np的routines函數創建數組
包含以下常見創建方法: 1) np.ones(shape, dtype=None, order=‘C‘) np.ones(shape=(4,5),dtype=float)#默認為1 np.zeros(shape, dtype=None, order=‘C‘)#默認為0 np.full(shape, fill_value, dtype=None, order=‘C‘) np.full(shape=(6,7),fill_value=999) np.linspace(start, stop, num=50, endpoint=True, retstep=False, dtype=None) 等差數列 np.linspace(0,100,20)#返回20個數,等差是5的一維數組 np.arange([start, ]stop, [step, ]dtype=None) arr1 = np.arange(3,10,2) #3是開始,10是結束,2是步長 的一維數組 np.random.seed(10)#固定時間因子 np.random.randint(0,100,size=(3,4))#產生的隨機數固定 array([[ 9, 15, 64, 28], [89, 93, 29, 8], [73, 0, 40, 36]])
註意:只有arange和linspace產生一維數組,其他的都可產生一維或者多維數組
ndarray的屬性
4個必記參數: ndim:維度 shape:形狀(各維度的長度) size:總長度 dtype:元素類型
ndarray的基本操作
1. 索引 一維與列表完全一致 多維時同理 np.random.seed(1) arr = np.random.randint(0,100,size=(5,5)) #根據索引修改數據 arr[1][2] = 6666444 #獲取二維數組前兩行 arr[0:2] #獲取二維數組前兩列 arr[:,0:2] #獲取二維數組前兩行和前兩列數據 arr[0:2,0:2] #將數組的行倒序 arr[::-1] #列倒序 arr[:,::-1] #全部倒序 arr[::-1,::-1] #將圖片進行全倒置操作 plt.imshow(img_arr[::-1,::-1,::-1]) 變形 .將一維數組變形成多維數組 array([[ 37, 12, 72, 9, 75], [ 5, 79, 6666444, 16, 1], [ 76, 71, 6, 25, 50], [ 20, 18, 84, 11, 28], [ 29, 14, 50, 68, 87]]) arr.shape (5, 5)
使用arr.reshape()函數,註意參數是一個tuple!數組元素變形前後要統一!
a.reshape((5,-1)) #-1表示的是自動計算行或列 array([[ 37, 12, 72, 9, 75], [ 5, 79, 9999, 16, 1], [ 76, 71, 6, 25, 50], [ 20, 18, 84, 11, 28], [ 29, 14, 50, 68, 87]]) 將多維數組變形成一維數組 a = arr.reshape((25,)) a.shape (25,) 圖片倒置 img_arr.shape (626, 413, 3) img_arr.size 775614 #將原數據三維數組變形成一維數組 arr_1 = img_arr.reshape((775614,)) #將arr_1元素倒置 arr_1 = arr_1[::-1] #將arr_1變形成三維數組 a_img = arr_1.reshape((626, 413, 3)) plt.imshow(a_img)
級聯
np.concatenate((arr,arr),axis=1) #0 縱軸 1 橫軸 級聯需要註意的點: 級聯的參數是列表:一定要加中括號或小括號 維度必須相同 形狀相符:在維度保持一致的前提下,如果進行橫向(axis=1)級聯,必須保證進行級聯的數組行數保持一致。如果進行縱向(axis=0)級聯,必須保證進行級聯的數組列數保持一致。 可通過axis參數改變級聯的方向 np.vstack():在豎直方向上堆疊 np.hstack():在水平方向上平鋪
切分
與級聯類似,三個函數完成切分工作: np.split(arr,行/列號,軸):參數2是一個列表類型 plt.imshow(np.split(img,(400,),axis=0)[0]) np.vsplit np.hsplit
副本
所有賦值運算不會為ndarray的任何元素創建副本。對賦值後的對象的操作也對原來的對象生效。 可使用copy()函數創建副本 c_arr = arr.copy() c_arr[1][4] = 100100
ndarray的聚合操作
求和np.sum arr.sum(axis=1)#求行的和 最大最小值:np.max/ np.min 平均值:np.mean() 其他聚合操作 Function Name NaN-safe Version Description np.sum np.nansum Compute sum of elements np.prod np.nanprod Compute product of elements np.mean np.nanmean Compute mean of elements np.std np.nanstd Compute standard deviation np.var np.nanvar Compute variance np.min np.nanmin Find minimum value np.max np.nanmax Find maximum value np.argmin np.nanargmin Find index of minimum value np.argmax np.nanargmax Find index of maximum value np.median np.nanmedian Compute median of elements np.percentile np.nanpercentile Compute rank-based statistics of elements np.any N/A Evaluate whether any elements are true np.all N/A Evaluate whether all elements are true np.power 冪運算
廣播機制
【重要】ndarray廣播機制的三條規則:缺失維度的數組將維度補充為進行運算的數組的維度。缺失的數組元素使用已有元素進行補充。
規則一:為缺失的維度補1(進行運算的兩個數組之間的維度只能相差一個維度)
規則二:缺失元素用已有值填充
規則三:缺失維度的數組只能有一行或者一列
m = np.ones((2, 3)) a = np.arange(3) display(m,a) array([[1., 1., 1.], [1., 1., 1.]]) array([0, 1, 2]) m+a array([[1., 2., 3.], [1., 2., 3.]])
ndarray的排序
快速排序
np.sort()與ndarray.sort()都可以,但有區別:
np.sort()不改變輸入
ndarray.sort()本地處理,不占用空間,但改變輸入
Pandas的數據結構
1、Series
Series是一種類似與一維數組的對象,由下面兩個部分組成:
values:一組數據(ndarray類型)
index:相關的數據索引標簽
1)Series的創建
import pandas as pd from pandas import Series,DataFrame import numpy as np 兩種創建方式: (1) 由列表或numpy數組創建 默認索引為0到N-1的整數型索引 #使用列表創建Series Series(data=[1,2,3,4,5],name=‘bobo‘) #使用numpy創建Series Series(data=np.random.randint(0,10,size=(5,))) #還可以通過設置index參數指定索引 s = Series(data=np.random.randint(0,10,size=(5,)),index=[‘a‘,‘b‘,‘c‘,‘d‘,‘e‘]) 由字典創建:不能在使用index.但是依然存在默認索引 dic = { ‘語文‘:100, ‘數學‘:90 } s = Series(data=dic)
Series的索引和切片
可以使用中括號取單個索引(此時返回的是元素類型),或者中括號裏一個列表取多個索引(此時返回的是一個Series類型)。
(1) 顯式索引: - 使用index中的元素作為索引值 - 使用s.loc[](推薦):註意,loc中括號中放置的一定是顯示索引 註意,此時是閉區間,能取到尾 (2) 隱式索引: - 使用整數作為索引值 - 使用.iloc[](推薦):iloc中的中括號中必須放置隱式索引 註意,此時是半開區間,取不到尾 切片:隱式索引切片和顯示索引切片 顯示索引切片:index和loc s[‘a‘:‘d‘] s.loc[‘a‘:‘c‘] 隱式索引切片:整數索引值和iloc s.iloc[0:3]
Series的基本概念
可以把Series看成一個定長的有序字典 向Series增加一行:相當於給字典增加一組鍵值對 s[‘g‘] = 10 可以通過shape,size,index,values等得到series的屬性 s.index s.values 可以使用s.head(),tail()分別查看前n個和後n個值 s.head(3) 對Series元素進行去重 s.unique() #返回的是一個ndarray 當索引沒有對應的值時,可能出現缺失數據顯示NaN(not a number)的情況 使得兩個Series進行相加 In [41]: s1 = Series([1,2,3],index=[‘a‘,‘b‘,‘c‘]) s2 = Series([1,2,3],index=[‘a‘,‘b‘,‘d‘]) s = s1+s2 a 2.0 b 4.0 c NaN d NaN dtype: float64 可以使用pd.isnull(),pd.notnull(),或s.isnull(),notnull()函數檢測缺失數據 s.isnull() a False b False c True d True dtype: bool s.notnull() a True b True c False d False dtype: bool s[s.notnull()]#過濾掉空的數據 a 2.0 b 4.0 dtype: float64
Series的運算
1) + - * / (3) Series之間的運算 在運算中自動對齊不同索引的數據 如果索引不對應,則補NaN s1 = Series([1,2,31,2],index=["a","d","s","r"]) s2 = Series([11,2,2,3],index=["a","d","s","b"]) s = s1+s2 a 12.0 b NaN d 4.0 r NaN s 33.0 dtype: float64
jupter nootbok 快捷鍵、NumPy模塊初識