{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 13多子元素元件Multi-child

>>:  前端工程师也能开发全端网页:挑战 30 天用 React 加上 Firebase 打造社群网站|Day25 阻挡会员路由

Day30 :【TypeScript 不用学了】我终於完赛了!

终於完赛了!最近跑去画画,附上一幅《小王子与小狐狸》,小王子里面,最喜欢的就是他们的故事,是说画画...

[ Day 11] Forensics 小暖身

哈罗,今天是一周的第一天 我们来试试 Forensics 吧 放心,一定从简单的题开始 又是拚手速的...

Day27--Bootstrap&CSS文字排版&样式(5)

对元素设置.text-lowercase可将所有英文字母转为小写。 <p class=&qu...

Day4 中秋节就是要烤肉阿-韩式烤五花肉

中秋节就是要烤肉阿! 台式烤肉吃腻了来换换口味吧, 韩剧及韩综中常常出现韩国烤五花肉,在家就可以吃!...

Day12-TypeScript(TS)的选择性属性(Optional Properties)

今天要来讲解TypeScript(TS)的选择性属性(Optional Properties), 在...