iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 26
1
Software Development

糊裡糊塗Python就上手系列 第 26

[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 的其餘運用方式


上一篇
[2020鐵人賽Day25]糊裡糊塗Python就上手-圖形介面設計方法
下一篇
[2020鐵人賽Day27]糊裡糊塗Python就上手-Numpy的觀念與運用(下)
系列文
糊裡糊塗Python就上手30

尚未有邦友留言

立即登入留言