為自己Coding
為自己Coding

YO~~ 剛跨入AI人工智慧領域的小小工程師, 熱愛自學, 熱愛分享, 下班後的我想為自己Coding, 積極撰寫教學文, 想將自學的程式知識分享給大家, 不斷追求進步的自己, 希望有一天能回饋社會,幫助需要幫助的人, 如果您有什麼很酷的想法,也覺得我還行,歡迎您找我合作~~ IG: https://www.instagram.com/coding_4_me/

Python讀書會 - 公開課程讀書會筆記 - NumPy介紹 - NumPy屬性 - 創建數組Array

Github連結

攝影師:Roberto Nickson,連結:Pexels


哈囉,大家好!!由於小弟最近接到擔任舉辦讀書會的講師,而這個讀書會是根據莫凡Python公開課程所開設的,大家希望我可以帶他們看過莫凡Python的相關系列課程,所以讀書會這個系列主要是根據莫凡Python的公開系列課程講解和筆記,當然我也會額外找尋資料並補充給大家,也因為是根據公開課程的筆記,所以我都會明確記錄出處,如果有違反作者權力,麻煩告知,我會在第一時間立即刪除這系列的文章,感謝大家,當然也要特別感謝莫凡Python這麼厲害的公開課程,讓大家可以無痛初探Python的魔法世界!!

我是跟其他優秀的講師一起開設莫凡Python讀書會的,所以我不會每個章節都有筆記喔XD!!



1. NumPy與Pandas介紹

課程資料來源: 1 numpy & pandas 有什么用? (教学教程)

應用的地方

  • Data Analysis 數據分析
  • Machine Learning 機器學習
  • Deep Learning 深度學習

當然有相當多的實務應用上都會使用它們,像是數據前處理、數據視覺化等等,都會透過它們來將資料進行一個清理與計算

補充: NumPy是什麼?

  • 說明:Numerical Python(數值Python)的縮寫,它提供了強大的接口,讓我們存儲和操作密集的數據緩衝區(dense data buffers)
  • Python關聯:NumPy的數組像是Python內建的列表(list)型態,但是NumPy數組在儲存和操作大量數據時,提供了比Python本身更好的效能
  • 重要性:NumPy數組接近是整個Python數據科學領域工具鏈的核心,許多我們所使用的數據分析與處理套件都是以它為基礎構建的

為什麼要使用NumPy和Pandas?

  • 它所消耗的電腦資源相當少: 因為它採用矩陣運算,所以會比Python原生自帶的字典Dictionary和列表快非常多
  • 運算速度非常快: 由於NumPy和Pandas都是採用C語言來撰寫的,而Pandas是基於NumPy所開發的,所以算是NumPy的升級版本

補充: 為什麼NumPy的數組進行計算操作時是非常快的?

計算NumPy的數組可以是非常快,也可以是非常慢的,然而快的原因:

  • 向量化的操作
  • 都是透過 NumPy 的通用函式(ufuncs : Universal Functions)來實現的

例如: 我們今天要拿兩個矩陣進行計算,如果都用Python字典Dictionary或是列表一個一個相加就會比較慢,如果使用NumPy的向量化操作就會快非常多




2. NumPy屬性

課程資料來源: 3 numpy 属性 (教学教程)

導入NumPy套件

## 導入NumPy套件
import numpy as np

將列表轉換為矩陣

## 將列表轉化為矩陣
array = np.array([[2,4,6],
        [3,7,9],
        [1,3,8]])
array

執行結果

array([[2, 4, 6],
   [3, 7, 9],
   [1, 3, 8]])

數組的屬性 - 維度、形狀、大小

## 數組維度
print('number of dim: ', array.ndim)
​
## 數組的形狀 - 行數核列數
print('array shape: ', array.shape)
​
## 數組的大小 - 元素個數
print('size: ', array.size)

執行結果

number of dim: 2
array shape: (3, 3)
size: 9



3. NumPy創建數組Array

課程資料來源: 4 numpy 的创建 array (教学教程)

簡單創建一個數組

## 創建一個數組
a = np.array([2,6,8])
print(a)

執行結果

[2 6 8]

指定創建數組的數據類型

整數

## 指定創建數組的數據類型
a = np.array([2,6,8], dtype = np.int)
print(a.dtype)
​
a = np.array([2,6,8], dtype = np.int64)
print(a.dtype)

執行結果

int32
int64

浮點數

## 指定創建數組的數據類型
a = np.array([2,6,8], dtype = np.float)
print(a.dtype)
​
a = np.array([2,6,8], dtype = np.float32)
print(a.dtype)

執行結果

float64
float32

創建特定的數組

創建各類型數組的方法

  • array: 創建數組
  • dtype: 數據類型
  • zeros: 創建全為0的數組
  • ones: 創建全為1的數組
  • empty: 創建接近0的數組
  • arange: 指定創建數組裡面的數據範圍值
  • linspace: 構建線段的數據值
  • reshape: 改變數組形狀

array

## 創建數組
a = np.array([[1,2,3],[4,5,6]])
print(a)

執行結果

[[1 2 3]
 [4 5 6]]

zeros

## 創建值全為0的5行6列數組
a = np.zeros((5,6))
print(a)

執行結果

[[0. 0. 0. 0. 0. 0.]
 [0. 0. 0. 0. 0. 0.]
 [0. 0. 0. 0. 0. 0.]
 [0. 0. 0. 0. 0. 0.]
 [0. 0. 0. 0. 0. 0.]]

ones

## 創建值全為1的5行6列數組
a = np.ones((5,6))
print(a)

執行結果

[[1. 1. 1. 1. 1. 1.]
 [1. 1. 1. 1. 1. 1.]
 [1. 1. 1. 1. 1. 1.]
 [1. 1. 1. 1. 1. 1.]
 [1. 1. 1. 1. 1. 1.]]

ones + 指定dtype

## 創建值全為1的5行6列數組,指定數據類型為int
a = np.ones((5,6), dtype = np.int)
print(a)
print(a.dtype)

執行結果

[[1 1 1 1 1 1]
 [1 1 1 1 1 1]
 [1 1 1 1 1 1]
 [1 1 1 1 1 1]
 [1 1 1 1 1 1]]
int32

empty

## 創建一個全空,但每個元素值都接近於0的數組
a = np.empty((4,5))
print(a)
​
## 創建一個全空,但每個元素值都接近於0的數組,並指定數據類型為int
b = np.empty((4,5), dtype = np.int)
print(b)

執行結果

[[6.23042070e-307 4.67296746e-307 1.69121096e-306 9.34609111e-307
 1.33511018e-306]
 [1.33511969e-306 6.23037996e-307 6.23053954e-307 9.34609790e-307
 8.45593934e-307]
 [9.34600963e-307 3.56036603e-307 1.37961641e-306 1.37961302e-306
 1.11259940e-306]
 [1.60219035e-306 1.11261570e-306 1.06811354e-306 8.34448533e-308
 1.21347091e+295]]
[[ -13901544   605    45    0    0]
 [    0    0    0    0 1819042080]
 [1634607739 975332717 1685353250 578057583 1702109740]
 [ 975336568 1869375010 875983969 1818652252 863265135]]

arange

## 創建一個指定範圍的數組: 0~60,中間隔5的值
a = np.arange(0,60,5)
print(a)

執行結果

[ 0 5 10 15 20 25 30 35 40 45 50 55]

linspace

## 創建線段行數據 - 1~20之間切10個點
a = np.linspace(1,20,10)
print(a)

執行結果

[ 1.    3.11111111 5.22222222 7.33333333 9.44444444 11.55555556
 13.66666667 15.77777778 17.88888889 20.   ]

reshape

## 改變數組形狀
a = np.linspace(1,20,10).reshape((5,2))
print(a)

執行結果

[[ 1.    3.11111111]
 [ 5.22222222 7.33333333]
 [ 9.44444444 11.55555556]
 [13.66666667 15.77777778]
 [17.88888889 20.   ]]



4. 補充閱讀

NumPy的屬性與操作

NumPy 的各種用法 - 讀書筆記 - Python Data Science Handbook - Python數據科學 - NumPy Array的屬性與操作(串聯與切割 - Concatenate、hstack、vstack、split、vsplit、 hsplit) - NumPy Array的各種計算方法 - UFuncs - #6

CC BY-NC-ND 2.0 版权声明

喜欢我的文章吗?
别忘了给点支持与赞赏,让我知道创作的路上有你陪伴。

加载中…

发布评论