iT邦幫忙

2021 iThome 鐵人賽

DAY 13
0
AI & Data

從資料庫到資料分析視覺化系列 第 13

{DAY 13} NumPy 學習筆記(中)

前言

今天要延續昨天的NumPy語法練習

內容會分成兩大部分

  1. 將會涵蓋如何提取、更新、刪除陣列裡的資料

    一樣都是會練習一維跟二維陣列上的操作

  2. 利用昨天的基本語法+今天的練習,

    應用在三維陣列的操作

由於數學公式眾多

所以只會包含一點常用的基本操作

剩下的還是要在需要的時候上官網查詢語法即可

這次學習的內容涵蓋之前在學校上課過的內容

還有跟昨天一樣的youtube影片

https://www.youtube.com/watch?v=QUT1VHiLmmI&t=394s

基本語法練習

  1. 提取/更新/刪除資料:
    1. 透過索引值提取單筆資料

      • 一維陣列: [索引值] 只需要在括號裡加上索引值即可

        arr = np.array([1,2,3])
        arr[2] #這裡想要取得索引值為2的數值
        '''
        3
        '''
        
      • 二維陣列:[row, column] ([第一維的索引值, 第二維的索引值])

        #創建二維陣列
        a = np.array([[1,2,3,4,5,6,7],[8,9,10,11,12,13,14]])
        print(a)
        '''[[ 1  2  3  4  5  6  7] [ 8  9 10 11 12 13 14]]'''
        
        # 在二維陣列裡使用[row,column],
        # 前面放的是要取的第一個維度(row),後面放的是第二個維度(column)
        a[1,5] # 使用a[1,-2]也可取得同樣位置 #也可表示為a[1][5]
        '''13'''
        
    2. 透過切片取出特定元素內容:" : "

      • 一維陣列:

        arr1 = np.arange(0, 10)
        print(arr1)
        '''array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])'''
        arr1[5:] #想取得索引值為5之後所有的數值
        '''array([5, 6, 7, 8, 9])'''
        arr1[:5] #想取得索引值為5之前的所有數值
        '''array([0, 1, 2, 3, 4])'''
        
      • 二維陣列:

        # 當我們要取得特定的row時
        a[0,:]  # 在第二個維度選項時使用 ":",可以取得第1個row裡所有的值
        ''' array([1, 2, 3, 4, 5, 6, 7])'''
        
        # 當我們要取得特定的column
        a[:, 2]# 在第一個維度選項時使用 ":",可以取得第2個column裡所有的值
        '''array([ 3, 10])''' #第二列裡的兩個值就被取出來了
        
        # 橫向切片
        a[:1]
        '''array([[1, 2, 3, 4, 5, 6, 7]])'''
        
    3. 按照指定間隔取值:[start index : end index: step size]

      • 一維陣列

        #首先先建立一個1~12的一維陣列
        prac = np.arange(13)
        print(prac)
        
        #若是我們想要他以偶數形式出現,step size設為2
        even_num = prac[0:13:2]
        '''[ 0  2  4  6  8 10 12]'''
        
        #若是想要出現0,4,8,12, stepsize要設為4
        print(prac[0:13:4])
        '''[ 0  4  8 12]'''
        
      • 二維陣列

        # 在二維陣列中,我們先來看原本的a長怎樣
        a = np.array([[1,2,3,4,5,6,7],[8,9,10,11,12,13,14]])
        print(a)
        '''[[ 1  2  3  4  5  6  7] [ 8  9 10 11 12 13 14]]'''
        
        # 如果我們想要看到 2,4,6
        # [從第一個row裡面去查, (start with 2:  end in 5: stepsize 2)] 
        print(a[0, 1:6:2]) # 從後面開始算可以使用(-1) : a[0, 1:-1:2]
        '''array([2, 4, 6])'''
        
    4. 更新值:直接用索引值取代原本的值

      #創建二維陣列
      a = np.array([[1,2,3,4,5,6,7],[8,9,10,11,12,13,14]])
      print(a)
      '''[[ 1  2  3  4  5  6  7] [ 8  9 10 11 12 13 14]]'''
      
      #當我們想要把13換成200
      a[1,5] = 200 # 13的索引值為[1,5]替換成200
      '''[[  1   2   3   4   5   6   7]
       [  8   9  10  11  12 200  14]]'''
      
      #當我們想要改掉整個row或是column
      a[:,2] = 55 # 想要把第二個column改成55
      '''[[  1   2  55   4   5   6   7]
       [  8   9  55  11  12 200  14]]'''
      
    5. 刪除資料:np.delete(陣列名稱, 索引值, axis=None)

      # 首先創建任意數列
      arr = np.arange(5,17)
      print(arr)
      '''[ 5  6  7  8  9 10 11 12 13 14 15 16]'''
      
      #當我們想要刪除8的話(索引值為3)
      print(np.delete(arr,3))
      '''[ 5  6  7  9 10 11 12 13 14 15 16] '''
      # 可以看到8不見了
      
      #使用切片的方法,指定切片位置
      #當我們想要切掉5~9的時候
      print(np.delete(arr,slice(0,5)))
      '''[10 11 12 13 14 15 16] '''
      
    6. 複製陣列:.copy()

      #當我們複製陣列的時候要很小心是否會影響到原本的陣列
      #首先來看個例子
      a = np.array([1,2,3])
      b = a
      b[0] = 100 #如果想把b裡面的1改成100
      print(b)
      print(a)
      '''
      [100   2   3]
       [100   2   3]'''
      # 我們可以看到a的1也同時變為100
      
      # 應該使用.copy()的語法 避免更改到原始值
      a = np.array([1,2,3])
      b = a.copy()
      b[0] = 100
      print(b)
      print(a)
      '''
      [100   2   3]
      [1 2 3]'''
      # 可以看到使用copy後就不會更改到a的原始數值
      
    7. 多個矩陣相加:

      • 垂直相加 .vstack( )
      • 水平相加 hstack( )
      # 垂直方向上相加矩陣
      v1 = np.array([1,2,3,4])
      v2 = np.array([5,6,7,8])
      
      print(np.vstack([v1,v2])) #先看看兩個矩陣加起來的樣子
      print("---------")
      print(np.vstack([v1,v2,v1,v2]))
      '''
      [[1 2 3 4]
       [5 6 7 8]]
      ---------
      [[1 2 3 4]
       [5 6 7 8]
       [1 2 3 4]
       [5 6 7 8]]'''
      
      #水平方向上相加矩陣
      h1 = np.zeros((2,4))
      h2 = np.zeros((2,2))
      np.hstack((h1,h2))
      '''array([[0., 0., 0., 0., 0., 0.],
             [0., 0., 0., 0., 0., 0.]])'''
      

用三維度陣列練習基礎語法

首先利用 np.array建立指定數值的三維陣列

b = np.array([[[1,2],[3,4]],[[5,6],[7,8]]])
print(b)
'''
[[[1 2]
  [3 4]]

 [[5 6]
  [7 8]]]'''

接下來要來取值,當我們想要取4的時候

# []內的索引值要從外到內寫
# 如果想要查到4
# 從第1個維度的第0個row > 第2個維度的第1個索引值 > 第3個維度的第2個索引值
print(b[0,1,1])
'''4'''

更進階一點,看一下怎麼操作

# get more fancy
print(b[:,0,:]) # 第1個維度的全部 > 第2個維度的第0個索引值 > 第3個維度的全部
print("-----")
print(b[:,0,0]) # 第1個索引值的全部 > 第2個維度的第0個索引值 > 第3個維度的第0個索引值
'''
[[1 2]
 [5 6]]
-----
[1 5]'''

練習取代其他值

# 先隨便找一個位置
print(b[:,1,:]) # 看他長怎樣
'''
[[3 4]
 [7 8]]'''

#當我們發現他是2*2的陣列時,替換成隨意的他值
b[:,1,:] = [[9,9],[8,8]]
print(b) #重新看b印出來會怎樣
'''
 [[[1 2]
  [9 9]]

 [[5 6]
  [8 8]]]
'''

結語

NumPy 的基礎語法跟練習就差不多到這裡了!

對陣列運算還有NumPy也有更深一層的理解

明天就會往數學運算的方向繼續練習

gogogo


上一篇
{DAY 12} NumPy 學習筆記(上)
下一篇
{DAY 14} NumPy 學習筆記(下)
系列文
從資料庫到資料分析視覺化30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言