[2020铁人赛Day26]糊里糊涂Python就上手-Numpy的观念与运用(上)

今日目标

学习了解 Python Numpy 资料科学的观念与运用

What is Numpy?

Numpy 是 Python 资料科学计算模组,主要用於资料处理上
同时,在 Python 许多常听到的资料科学计算模组(Pandas、Scikit-learn等),都需要用到 Numpy 模组内的一部分功能,几乎是使用 Numpy 当做基础开发出来的

了解 Numpy 阵列

Numpy 使用多维阵列 ndarray 来取代 Python 的串列资料,是个可以装载相同类型资料的多维容器

阵列 说明
一维阵列 向量(Vector)
二维阵列 矩阵(matrix)
多维阵列 使用多个矩阵(matrix)各轴向(axis)组合起来的形状(shape)

读取方式,横(左右)的为列 row,直(上下)的为栏 column(col)

一维阵列 1D array 向量(Vector)
1 2 3

因一维阵列只有一轴向,因此只有 col 的数量,所以形状 shape(3)


二维阵列 2D array 矩阵(matrix)
1 2 3
4 5 6

二维阵列有 row 跟 col 二轴向,轴向看法:先看 row,再看 col(上述有2个 row,3个 col),因此形状是 shape(2,3)


多维阵列,是以多个 row 跟 col 形成的矩阵组合起来
以三维来说,有3个矩阵,2个 row,3个 col,轴向看法:先看矩阵数量,再看 row,最後看 col,因此形状是 shape(3,2,3)

使用介绍

使用前需要先导入 Numpy 模组(为了後续撰写方便,可以自行取别名)

import numpy as np

建立阵列 array()

可以将串列元组资料型态,转换为 ndarray 资料型态,语法为:

numpy.array(object, [其余参数])

dtype = None, order = None, subok = False, ndmin = 0

array参数 说明
object 串列或元组资料
dtype 阵列的资料型态

(还有其他参数,此篇仅说到将使用到的,若感兴趣可自行查询学习)

实际体验

import numpy as np

v1 = np.array((1, 2, 3, 4, 5)) # 使用 list 资料型态
v2 = np.array([1.1, 2.2, 3.3, 4.4, 5.5]) # 使用 tuple 资料型态

print(v1)
print("v1 type:%s"%(type(v1))) # 印出 v1 资料型态
print(v2)
print("v2 type:%s"%(type(v2))) # 印出 v2 资料型态

https://ithelp.ithome.com.tw/upload/images/20201011/20091333ClzTN2SxdB.png

查询或设定该阵列型别 dtype

若是要查询指定的 ndarry 资料的话,仅需使用「ndarray.dtype」即可
若是要设定 ndarry 资料型态的话,仅需要在建立阵列时将 dtype 参数加入,并指定资料型态即可

实际体验

import numpy as np

v1 = np.array((1, 2, 3, 4, 5))
v2 = np.array([1.1, 2.2, 3.3, 4.4, 5.5])
v3 = np.array([1.1, 2.2, 3.3, 4.4, 5.5], dtype=int) # 转换资料型态为 int

print("v1.dtype:%s"%(v1.dtype)) # 印出 v1 资料型态
print("v2.dtype:%s"%(v2.dtype)) # 印出 v2 资料型态
print("v2:%s"%(v2)) # 印出 v2 资料内容
print("v3:%s"%(v3)) # 印出 v3 资料内容
print("v3.dtype:%s"%(v3.dtype)) # 印出 v3 资料型态

https://ithelp.ithome.com.tw/upload/images/20201011/20091333xPMG43H9ql.png

建立有顺序的整数数列 arange()

arange 其实跟 range 有点相似,可以建立等距的整数数列
其语法必要的参数是终止值,而若要使用间隔值,则还需要设定起始值:
(若只有终止值,没有起始值的话,起始值会以 0 开始)

numpy.arange([起始值], 终止值, [间隔值])

实际体验
印出范围 1~20,值与值之间需要相间隔 3

import numpy as np

arangeValue = np.arange(1, 20, 3)
print(arangeValue)

https://ithelp.ithome.com.tw/upload/images/20201011/2009133300lWmmtrsx.png

建立同等阵列:建立全部都是 0 的阵列 zeros()

numpy.zeros((阵列各维度用逗号区隔))

实际体验

import numpy as np

zeroValue = np.zeros((3))
print(zeroValue)

zeroValue2 = np.zeros((3, 5))
print(zeroValue2)

https://ithelp.ithome.com.tw/upload/images/20201011/200913334z1QJT8xhU.png

建立同等阵列:建立全部都是 1 的阵列 ones()

numpy.ones((阵列各维度用逗号区隔))

实际体验

import numpy as np

oneValue = np.ones((3))
print(oneValue)

oneValue2 = np.ones((3, 5))
print(oneValue2)

https://ithelp.ithome.com.tw/upload/images/20201011/20091333C6OPdnRyML.png

建立等距阵列 linspace()

只要给予阵列的区间「起始值, 终止值」,就可以要求在这个区间内产生几个元素,语法为:

numpy.linspace(起始值, 终止值, 元素个数)

实际体验

import numpy as np
linspaceValue = np.linspace(1, 10, 3)
print(linspaceValue)

https://ithelp.ithome.com.tw/upload/images/20201011/20091333n9uS8H8LNU.png

建立随机值阵列 empty()

将透过给予的形状,建立随机值的阵列

numpy.empty((阵列各维度用逗号区隔))

实际体验

import numpy as np
emptyValue = np.empty((2))
print(emptyValue)

https://ithelp.ithome.com.tw/upload/images/20201011/20091333wX3rCEGzB3.png

实际体验-建立三维阵列,并印出「维度 ndim」、「形状 shape」、「数量 size」

ndarray 物件 说明
ndarray.ndim ndarray 物件的维度
ndarry.shape ndarry 物件的每一个维度的大小
ndarry.size ndarry 物件所组成之 array 的总元素数量,回应之数值会等於 ndarray.shape 的每个元素相乘
import numpy as np

list_data =[
[[1, 3],
 [2, 6]],
[[1, 3],
 [2, 6]],
[[1, 3],
 [2, 6]]
]

numpyArray = np.array(list_data)

print("维度:", numpyArray.ndim)
print("形状:", numpyArray.shape)
print("数量:", numpyArray.size)

https://ithelp.ithome.com.tw/upload/images/20201011/200913339j5roaBAjm.png

结论

若是想接触 Python 资料科学的领域的话,Numpy 真的需要熟悉运用
将在下篇说明 Numpy 的其余运用方式


<<:  Chat & SignalR (Server)

>>:  [DAY 27] 复刻 Rails - Routing 威力加强版 - 1

Unity与Photon的新手相遇旅途 | Day8-角色动画(Idle、walk)

今天的内容为该如何运用程序码来控制角色动画切换 ...

失误的修补智慧

在各行各业工作时,很多人都有因为工作上失误,而被上司责骂的经验,这些必经的过程,被视为「学习」和「记...

[Day30]凌晨狂上上下下23次-时间序列分析终局之战,ARIMA差分整合移动平均自回归模型

在时间序列分析中相当有名的一个数学模型,差分整合移动平均自回归模型,又名为ARIMA模型,我们就来介...

判断选取哪个radio button

var item = $('input:radio[name="radio_name&qu...

云服务器安全吗?云服务器有哪些优势?

相比较传统的服务器来说,云服务器的安全性是更高的,因为传统的服务器的安全性,其实是需要日常大量的维护...