#8 NumPy教学

NumPy操作

安装

请在终端机底下输入这个,谢谢
pip install numpy

载入NumPy

像这样

import numpy as np

np是世俗公认的numpy简称,如果要使用其他numpy的别名,请三思而後行

NumPy阵列

相较於python的list,他们最大的差别就是list能够储存不同资料型态的资料,而NumPy阵列只能储存相同的资料型态,但效能带来的极致体验,还是让NumPy在处理大量资料中独霸一方,阵列操作可以说是NumPy招牌,其特色为同质且支援多重维度的ndarray物件,这个物件的三个重要属性分别为:
维度(ndim)
形状(shape)
资料型态(dtype)
一般我们称一维阵列为vector而二维阵列为matrix,使用方法如下

基本操作

# 载入numpy模组
import numpy as np

if __name__ == "__main__":
    # 以列表来建立numpy阵列
    l1 = [12, 14, 0, 5, 23]
    a1 = np.array(l1)
    
    l2 = [17, -5, 28, 5, 6]
    a2 = np.array(l2)

    # 阵列相加
    print(a1 + a2)
    # [29  9 28 10 29]

    # 显示重要属性
    print(a1.ndim)
    # 1 => 一维阵列
    print(a1.shape)
    # (5,) => 五个元素
    print(a1.dtype)
    # int64 => 资料型态

    # 存取资料
    print(a1[3])
    # 5 # 载入numpy模组
import numpy as np

if __name__ == "__main__":
    # 以列表来建立numpy阵列
    l1 = [12, 14, 0, 5, 23]
    a1 = np.array(l1)
    
    l2 = [17, -5, 28, 5, 6]
    a2 = np.array(l2)

    # 阵列相加
    print(a1 + a2)
    # [29  9 28 10 29]

    # 显示重要属性
    print(a1.ndim)
    # 1 => 一维阵列
    print(a1.shape)
    # (5,) => 五个元素
    print(a1.dtype)
    # int64 => 资料型态
    

维度转换

import numpy as np

if __name__ == "__main__":
    # 以列表来建立numpy阵列
    l1 = [12, 14, 0, 5, 23, 3]
    a1 = np.array(l1)
    print(a1)
    # [12, 14, 0, 5, 23, 3]

    # 显示重要属性
    print(a1.ndim)
    # 1 => 一维阵列
    print(a1.shape)
    # (6,) => 六个元素
    print(a1.dtype)
    # int64 => 资料型态
    
    # 维度转换
    a1 = a1.reshape([2, 3])
    print(a1)
    # [[12 14  0] [ 5 23  3]]
    # 显示重要属性
    print(a1.ndim)
    # 2 => 二维阵列
    print(a1.shape)
    # (2, 3) => 2*3个元素
    print(a1.dtype)
    # int64 => 资料型态

转换资料型态

import numpy as np

if __name__ == "__main__":
    # 以列表来建立numpy阵列
    l1 = [12, 14, 0, 5, 23, 3]
    a1 = np.array(l1)
    print(a1)
    # [12, 14, 0, 5, 23, 3]
    print(a1.dtype)
    # int64 => 资料型态
    
    # 转换资料型态
    a1 = a1.astype("float32")
    print(a1)
    # [12. 14.  0.  5. 23.  3.]
    print(a1.dtype)
    # float32 => 资料型态

取一小部份的阵列(切片)

import numpy as np

if __name__ == "__main__":
    # 以列表来建立numpy阵列
    l1 = [12, 14, 0, 5, 23, 3]
    a1 = np.array(l1)
    print(a1)
    # [12, 14, 0, 5, 23, 3]
    
    print(a1[0:3])
    # 从第0个开始取,取到第3个之後不取
    # [12 14  0]

    print(a1[4:6])
    # 从第4个开始取,取到第6个之後不取
    # [23  3]

过滤

import numpy as np

if __name__ == "__main__":
    # 以列表来建立numpy阵列
    l1 = [12, 14, 0, 5, 23, 3]
    a1 = np.array(l1)
    print(a1)
    # [12, 14, 0, 5, 23, 3]

    # 用布林遮罩来过滤资料
    mask = a1 % 2 == 0
    print(mask)
    # [ True  True  True False False False]
    print(a1[mask])
    # [12 14  0]

今天我们要来研究一下NumPy多维阵列,先从一点简单的开始,二维阵列,俗称矩阵(matrix)

矩阵

基本运算

import numpy as np

if __name__ == "__main__":
    # 以二维列表来建立numpy二维阵列
    l1 = [[12, 14, 0], [5, 23, 3]]
    a1 = np.array(l1)
    l2 = [[34, 17, 97], [83, 18, 34]]
    a2 = np.array(l2)
    print(a1)
    # [[12 14  0] [ 5 23  3]]
    print(a2)
    # [[34 17 97] [83 18 34]]

    #矩阵加法
    print(a1 + a2)
    #[[46 31 97] [88 41 37]]
    #矩阵减法
    print(a1 - a2)
    #[[-22  -3 -97] [-78   5 -31]]
    #元素乘积(不是矩阵乘法)
    print(a1 * a2)
    #[[408 238   0] [415 414 102]]
    #矩阵除法
    print(a1 / a2)
    #[[0.35294118 0.82352941 0.        ] [0.06024096 1.27777778 0.08823529]]

矩阵转置

矩阵转置会将栏和列互换

import numpy as np

if __name__ == "__main__":
    # 以二维列表来建立numpy二维阵列
    l1 = [[12, 14, 0], [5, 23, 3]]
    a1 = np.array(l1)
    print(a1)
    # [[12 14  0]
    #  [ 5 23  3]]

    # 矩阵转置
    print(a1.T)
    # [[12  5] 
    #  [14 23] 
    #  [ 0  3]]

矩阵点积

注意矩阵点积需要第一个矩阵的栏数等於第二个矩阵的列数喔

import numpy as np

if __name__ == "__main__":
    # 以二维列表来建立numpy二维阵列
    l1 = [[12, 14, 0], [5, 23, 3]]
    a1 = np.array(l1)
    l2 = [[34, 17, 97], [83, 18, 34], [44, 19, 22]]
    a2 = np.array(l2)
    print(a1)
    # [[12 14  0]
    #  [ 5 23  3]]
    print(a2)
    # [[34 17 97]
    #  [83 18 34]
    #  [44 19 22]]
    
    # 矩阵点积
    print(a1.dot(a2))
    # [[1570  456 1640]
    #  [2211  556 1333]]

    print(a2.dot(a1))
    # 报错 a2的栏数是3 a1的列数是2

矩阵内积

import numpy as np

if __name__ == "__main__":
    # 以二维列表来建立numpy二维阵列
    l1 = [[12, 14, 0], [5, 23, 3]]
    a1 = np.array(l1)
    l2 = [[34, 17, 97], [83, 18, 34], [44, 19, 22]]
    a2 = np.array(l2)
    print(a1)
    # [[12 14  0]
    #  [ 5 23  3]]
    print(a2)
    # [[34 17 97]
    #  [83 18 34]
    #  [44 19 22]]
    
    # 矩阵内积
    print(np.inner(a1,a2))
    # [[ 646 1248  794]
    #  [ 852  931  723]]

矩阵外积

import numpy as np

if __name__ == "__main__":
    # 以二维列表来建立numpy二维阵列
    l1 = [[12, 14, 0], [5, 23, 3]]
    a1 = np.array(l1)
    l2 = [[34, 17, 97], [83, 18, 34], [44, 19, 22]]
    a2 = np.array(l2)
    print(a1)
    # [[12 14  0]
    #  [ 5 23  3]]
    print(a2)
    # [[34 17 97]
    #  [83 18 34]
    #  [44 19 22]]
    
    # 矩阵外积
    print(np.outer(a1,a2))
    # [[ 408  204 1164  996  216  408  528  228  264]
    #  [ 476  238 1358 1162  252  476  616  266  308]
    #  [   0    0    0    0    0    0    0    0    0]
    #  [ 170   85  485  415   90  170  220   95  110]
    #  [ 782  391 2231 1909  414  782 1012  437  506]
    #  [ 102   51  291  249   54  102  132   57   66]]

<<:  执行弱点扫描之後

>>:  从 IT 技术面细说 Search Console 的 27 组数字 KPI (23) :KPI 总表

资料分析商业应用与策略管理 #笔记三

收集完大数据,管理与查找大数据的工具也同等重要,譬如我想知道我某天去某间咖啡厅点了什麽饮料,即使手机...

DAY 17 - 九尾狐妹妹 (1) 草稿

大家好~ 我是五岁~~ 我要来尝试画些比较细致(复杂?)的东西~ 今天就来画画看九尾狐小妹妹吧~~ ...

Day14 Number Guessing

今天要利用之前学到的东西写一个猜数字游戏,此猜数字游戏要符合以下条件: 1 猜数字范围介於0-99间...

Day19 - [丰收款] 防止掉单小帮手,以时间条件查询交易订单

细数一下之前实作的API功能,有建立订单以及选择支付方式(ATM虚拟帐号、信用卡付款),拿到永丰AP...

冒险村25 - Design Pattern(5) - Service Object

25 - Design Pattern(5) - Service Object Service 相对...