2-Anaconda簡介&Numpy基礎
阿新 • • 發佈:2020-12-06
Anaconda使用
- 為什麼使用 Anaconda
- 缺點
- 檔案比較大
- 優點
- 包非常齊全, 一般不會出現問題.
- 虛擬環境不會重新安裝包,而是使用已有包的連結
- 缺點
- conda常用命令
- 進入cmd
- conda create -n env1 python=3.6
- 建立python3.6的env1虛擬環境
- conda create -n env1 python=3.6
- conda activate xxxx
- 開啟xxxx環境
- conda deactivate
- 關閉環境
- conda env list
- 顯示所有的虛擬環境
- conda remove -n xxxx --all
- 刪除虛擬環境
- conda list
- 檢視已經安裝的檔案包
- conda uninstall xxx
- 解除安裝xxx檔案包
- 進入cmd
Numpy基礎
-
匯入numpy庫
-
# 資料分析“三劍客” import numpy as np import pandas as pd import matplotlib.pyplot as plt
-
-
建立ndarray
-
使用np.array()由python list建立
-
numpy預設ndarray的所有元素的型別是相同的
- 如果傳進來的列表中包含不同的型別,則統一為同一型別,優先順序:str>float>int
- n = np.array(['hello', 1, 2, 3.14])
- 如果傳進來的列表中包含不同的型別,則統一為同一型別,優先順序:str>float>int
-
使用np的routines函式建立
- np.ones(shape, dtype=None, order='C')
- n = np.ones(5)
- 建立一個所有元素都為1的多維陣列
- n = np.ones((3, 4), dtype=np.int)
- 整數,3行4列
- n = np.ones(5)
- np.zeros(shape, dtype=float, order='C')
- n = np.zeros((5, 6), dtype=int)
- 建立全為0的陣列
- n = np.zeros((5, 6), dtype=int)
- np.full(shape, fill_value, dtype=None, order='C')
- n = np.full((3, 4), 8)
- 建立用指定元素填充的陣列
- np.eye(N, M=None, k=0, dtype=float)
- np.eye(6, 6, dtype=int)
- 單位陣
- n = np.eye(5, 5, dtype=int, k=2)
- k表示偏移
- 對角線的1向右邊移動兩個位置
- k=-2對角線的1向左邊移動兩個位置
- k表示偏移
- np.eye(6, 6, dtype=int)
- np.linspace(start, stop, num=50, endpoint=True, retstep=False, dtype=None)
- n = np.linspace(0, 100, 50, dtype=float, endpoint=True, retstep=True)
- 建立一個等差數列
- 保留結束點,顯示步長
- n = np.linspace(0, 100, 50, dtype=float, endpoint=True, retstep=True)
- np.arange([start, ]stop, [step, ]dtype=None)
- n = np.arange(6)
- 和python的range類似,作用是取一個範圍
- n = np.arange(2, 10, 2)
- array([2, 4, 6, 8])
- np.random.randint(low, high=None, size=None, dtype='l')
- n = np.random.randint(1, 3)
- 隨機的整數, 範圍是:[1, 3)
- n = np.random.randint(1, 10, size=(3, 4, 5))
- 3維,總共3*4*5個隨機數
- n = np.random.randint(0, 256, size=(6, 8, 3))
- plt.imshow(n)
- 建立一個隨機圖: 三維
- n = np.random.randint(1, 3)
- 操作圖片
- cat = plt.imread('cat.jpg')
- cat.shape # 形狀:4567303
- plt.imshow(cat)
- np.random.randn(d0, d1, ..., dn)
- 標準正太分佈
- n = np.random.randn(10)
- array([ 2.25358397, 1.04323284, 0.2821671 , -1.31587675, -0.93080649, 0.86579112, -2.13239042, 3.31663086, -0.32907992, 0.57921973])
- np.random.normal(loc=0.0, scale=1.0, size=None)
- 正態分佈
- n = np.random.normal(170, 5, size=(3, 4))
- 均值,方差
- 正態分佈
- np.random.random(size=None)
- 生成0到1的隨機數,左閉右開
- n = np.random.random(size=(3, 4))
- 生成0到1的隨機數,左閉右開
- np.random.rand(3, 4)
- 返回一個或一組服從“0~1”均勻分佈的隨機樣本值。
- np.ones(shape, dtype=None, order='C')
-
-
ndarray的屬性
- n.ndim
- 維度
- n.shape
- 形狀(各維度的長度)
- n.size
- 總長度3*4*5*......
- n.dtype
- 元素型別
- n.ndim
-
ndarray的基本操作
-
索引
- 一維
- n[4]
- 多維
- n[2][2]
- n[2, 2]
- 一維
-
切片
- 一維
- 與列表完全一致
- list1[:-1]
- list1[::-1]
- 多維
- n[0]
- 獲取第一行
- n[0] = 0
- 修改第一行
- n[1:4]
- 切片取連續的行
- n[[1,3,4]]
- 取指定的多行
- n[:,0]
- 獲取第一列
- n[:,[-1, 1]]
- 獲取指定的多列
- n[:, 1:4]
- 獲取連續的多列
- n[1:-1, 1:-1]
- 指定的行和列
- n[0]
- 一維
-
翻轉
- n[::-1]
- 行翻轉
- n[:, ::-1]
- 列翻轉
- n[::-1]
-
n.transpose()/n.T
- 矩陣轉置
- 和n[::-1, ::-1]不一樣
-
變形
- 使用reshape函式,注意引數是一個tuple!
- n.reshape((4, 5))
- n.shape=20=4*5
- n3.reshape(20)
- 變成1維
- n3.reshape((20,))
- 變成1維
- n3.reshape((-1,))
- 變成1維
- 不需要考慮總數
- cat2 = cat.reshape((-1, 3))
- 第一維與第二維合併
- cat3 = cat.reshape((3, -1))
- 第二維與第三維合併
-
級聯
-
np.concatenate() 級聯需要注意的點
- 級聯的引數是列表:一定要加中括號或小括號
- 維度必須相同
- 形狀相符
- 級聯的方向預設是shape這個tuple的第一個值所代表的維度方向
- 可通過axis引數改變級聯的方向
-
display(n1, n2)
- 同時顯示多個
-
np.concatenate((n1, n2))
- 預設上下合併
-
np.concatenate((n1, n2), axis=0)
- 預設axis=0 表示第一個維度 垂直合併
-
np.concatenate((n1, n2), axis=1)
- axis=1表示第二個維度 水平合併
-
np.hstack((n1, n2))
- 水平合併/水平級聯
-
np.vstack((n1, n2))
- 垂直合併/垂直級聯
-
n = np.array([[1,2,3], [4,5,6], [7,8,9]])
- np.hstack(n)
- 處理自己
- array([1, 2, 3, 4, 5, 6, 7, 8, 9])
- np.hstack(n)
-
n = np.array([1,2,3])
-
np.vstack(n)
-
處理自己
-
array([[1], [2], [3]])
-
-
-
-
切分/拆分/分隔
- np.vsplit(n, 4)
- 垂直拆分,行等分成4份
- np.vsplit(n, (1, 3, 5))
- 垂直拆分,在指定的下標位置拆分,可以有多個拆分點
- np.hsplit(n, 2)
- 水平拆分,將列等分成兩份
- np.split(n, 2)
- 預設axis=0
- np.split(n, 2, axis=0)
- 按第一個維度拆分,垂直拆分/上下拆分
- np.split(n, 2 ,axis=1)
- 按第二個維度拆分,水平拆分/左右拆分
- np.vsplit(n, 4)
-
副本
-
所有賦值運算不會為ndarray的任何元素建立副本。對賦值後的物件的操作也對原來的物件生效
-
可使用copy()函式建立副本
-
拷貝
-
n = np.random.randint(0, 10, size=(2, 4)) n2 = n.copy() n[0,0] = 99 display(n, n2) ''' array([[99, 5, 5, 3], [ 7, 5, 2, 8]]) array([[3, 5, 5, 3], [7, 5, 2, 8]]) '''
-
-
-
-
ndarray的聚合操作
-
求和
- 一維
- np.sum(n)
- n.sum()
- 二維
- np.sum(n, axis=0)
- 表示將每一列的所有行的數相加
- np.sum(n, axis=1)
- 表示將每一行的所有列的數相加
- np.sum(n, axis=(0, 1))
- 表示將指定維度的數求和
- np.nansum(n)
- 忽略nan
- np.sum(n, axis=0)
- 一維
-
最大最小值
- np.max/ np.min
-
平均值
- np.mean(n)
- np.average(n)
-
中位數
- np.median(n)
-
次冪
- np.power(n, 3)
- n**3
-
第一個最大數的下標
- np.argmax(n)
- n[np.argmax(n)] = 0
-
第一個最小數的下標
- np.argmin(n)
-
找到所有的最大數的下標
- np.argwhere(n==np.max(n)).reshape(-1)
-
其他聚合操作
- np.prod
- np.std
- np.var
- np.min
- np.max
- np.percentile
- Compute rank-based statistics of elements
- np.any
- Evaluate whether any elements are true
- np.all
- Evaluate whether all elements are true
- 所有的聚合操作都可以剔除nan
-
ndarray的矩陣操作
-
基本矩陣操作
-
算術運算子
- n + 10
- n - 10
- n * 10
- n / 10
- n % 6
- n // 4
- n ** 2
-
兩個陣列進行運算
-
+-*/
-
矩陣積np.dot()
- np.dot(n1, n2)
- 點積,矩陣乘法
-
廣播機制
-
為缺失的維度補維度
-
假定缺失元素用已有值填充
-
''' array([[0], [1], + array([0, 1, 2]) = [0,0,0] [0,1,2] [0,1,2] [2]]) [1,1,1] + [0,1,2] = [1,2,3] [2,2,2] [0,1,2] [2,3,4] '''
-
-
-
-
-
ndarray的排序
- n2 = np.sort(n) # 不改變輸入
- 不改變原陣列,類似於Python中的sorted
- n.sort() # 本地處理,不佔用空間,但改變輸入
- 改變原陣列,類似於Python中的sort
- n2 = np.sort(n) # 不改變輸入