1. 程式人生 > 實用技巧 >2-Anaconda簡介&Numpy基礎

2-Anaconda簡介&Numpy基礎

Anaconda使用

  • 為什麼使用 Anaconda
    • 缺點
      • 檔案比較大
    • 優點
      • 包非常齊全, 一般不會出現問題.
      • 虛擬環境不會重新安裝包,而是使用已有包的連結
  • conda常用命令
    • 進入cmd
      • conda create -n env1 python=3.6
        • 建立python3.6的env1虛擬環境
    • conda activate xxxx
      • 開啟xxxx環境
    • conda deactivate
      • 關閉環境
    • conda env list
      • 顯示所有的虛擬環境
    • conda remove -n xxxx --all
      • 刪除虛擬環境
    • conda list
      • 檢視已經安裝的檔案包
    • conda uninstall xxx
      • 解除安裝xxx檔案包

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])
    • 使用np的routines函式建立

      • np.ones(shape, dtype=None, order='C')
        • n = np.ones(5)
          • 建立一個所有元素都為1的多維陣列
        • n = np.ones((3, 4), dtype=np.int)
          • 整數,3行4列
      • np.zeros(shape, dtype=float, order='C')
        • n = np.zeros((5, 6), dtype=int)
          • 建立全為0的陣列
      • 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向左邊移動兩個位置
      • np.linspace(start, stop, num=50, endpoint=True, retstep=False, dtype=None)
        • 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)
          • 建立一個隨機圖: 三維
      • 操作圖片
        • 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))
      • np.random.rand(3, 4)
        • 返回一個或一組服從“0~1”均勻分佈的隨機樣本值。
  • ndarray的屬性

    • n.ndim
      • 維度
    • n.shape
      • 形狀(各維度的長度)
    • n.size
      • 總長度3*4*5*......
    • n.dtype
      • 元素型別
  • 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[::-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])
      • 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)
        • 按第二個維度拆分,水平拆分/左右拆分
    • 副本

      • 所有賦值運算不會為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.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