# Python NumPy 基礎教程
###### tags: `程式教程` `程式` `python`
## NumPy基本操作(一)
### 重要知識點
- 介紹如何安裝及載入 NumPy。
- 依照陣列產生的需求,使用相對應的函式,建立 NumPy 陣列。
- 了解陣列屬性,在操作陣列時用來查看陣列資訊。
- NumPy 相關單元如果沒有特別說明的話,陣列均指 NumPy 陣列 (而非其他,例如 Python 陣列)。
### NumPy 簡介
- NumPy 是廣受歡迎的 open source Python 程式庫,支援多維度陣列與矩陣運算,也針對陣列運算提供大量的數學函式庫。
- NumPy 的核心是由 C 語言開發,所以在陣列與矩陣運算時具有高效能的特性。
- 2019 年時 GitHub 統計指出有 74% 的機器學習專案中使用 NumPy。

### 引入numpy套件
``` =python
import numpy as np
```
### 查看套件版本
``` =python
np.__version__
```
### 建立 NumPy array (陣列)
- 建立陣列的方式是透過執行 NumPy 函式,依照不同的目的,以下逐一介紹常用來建立陣列的函式。
- 最基本的方式是呼叫 array() 函式,可將 Python list 或元組 (tuple) 的值建立為 NumPy array。
- 要用序列數字產生等差一維陣列的話,可以使用 arange() 與 linspace() 函式,兩者的函式引數很類似,其中結束值為必輸,起始值、間隔值非必輸。產生的序列數字包含起始值但不包含結束值,也就是 [start, stop) 的表示方式。
- 不同的地方在於 linspace() 對於產生的元素可以有更多的控制。
- 呼叫 zeros()、ones() 函式,可以依照傳入的形狀引數,建立元素全為 0、全為 1 的陣列。
- 使用 empty() 函式則是不需要給定起始值,但是可以建立給定形狀的陣列,元素值則會隨機給定。
- NumPy 也提供隨機產生陣列元素的函式,可以用來建立陣列。

- 隨機陣列也可以產生不同分佈的元素,NumPy 提供的函式和分佈非常豐富,所有函式與詳細說明可以參考官方文件。
### NumPy陣列的索引和切片 (Slicing)
- 透過索引存取陣列元素或進行切片 (slicing),可以使用索引值,或是 [start:stop:step] 語法取得範圍內的元素,要留意的是起始-結束範圍仍是 half-open 的,所以回傳的元素將不包含結束索引的元素。
- 索引 -1 表示取得最後一個元素。切片如果只有給定 step 值為 -1 的話,則代表是反向取出,元素值是從最後一筆開始取出。
- 若沒有給定 start 或 stop 值的話則代表是取出該索引之前或之後的所有元素。若 start 和 stop 值都沒有給定的話,就是取出所有元素值。
### NumPy 陣列的常用屬性
陣列的屬性在操作的過程中經常需要用到,常用屬性及說明如下表:

### 知識點回顧
- NumPy 的安裝及載入。
- 如何依照需求,使用相對應的函式產生陣列。
- 陣列的索引、切片、以及屬性,都是 NumPy 基本操作時常會用到的工具。
## 範例
https://drive.google.com/file/d/16YkyPHLmIr4nNC6IdlHWQrBMGZEXVu4y/view?usp=sharing
記得用Colab開啟
## 作業
https://drive.google.com/file/d/16rcrTJIwoW6oEmLVkx05VoUXfK7RGzUw/view?usp=sharing
## 快速連結
第二章:[範例](https://drive.google.com/file/d/16koVfYWxAR10XvB4Nw24Ylej2JMQ0v-R/view?usp=sharing)、[作業](https://drive.google.com/file/d/16yVWPAeprowe4zJZUMweccwtdT1aRGy-/view?usp=sharing)
第三章:[範例](https://drive.google.com/file/d/16jye5NbQEq4RQeCzuf1hCA-doXIG2HI3/view?usp=sharing)、[作業](https://drive.google.com/file/d/16yvab0hrjCXaYLDqHckl7R994LEx3soY/view?usp=sharing)
第四章:[範例](https://drive.google.com/file/d/16glgIWnwjcVZb0trS53zNOd2sbFEaKbT/view?usp=sharing)、[作業](https://drive.google.com/file/d/172a-2nnWhg0ZFgEreo-udvAggcZRH2VT/view?usp=sharing)
第五章:[範例](https://drive.google.com/file/d/16fkwctJ6wtPDPLJhz0l1RQJOIY19m_a3/view?usp=sharing)、[作業](https://drive.google.com/file/d/174ZzA_WHbwTDZ7nAIox9O60bBalMYbnO/view?usp=sharing)
第六章:[範例](https://drive.google.com/file/d/16f_FG4z64Cqzxj_9Y2Y5cxrp3kwxHbGY/view?usp=sharing)、[作業](https://drive.google.com/file/d/16rHCRctcrq7a5VXqkv4jJGI7sUmeilN0/view?usp=sharing)
第七章:[範例](https://drive.google.com/file/d/16cp6ayReg4_brhHSkcj-exltjVe5dGIZ/view?usp=sharing)、[作業](https://drive.google.com/file/d/16qZNvxSd7CIfILx1oHzp9WnxoRAgEpM-/view?usp=sharing)
第八章:[範例](https://drive.google.com/file/d/16bgTQsdvdQfWgt9UDVgw9gDM8xckN4vF/view?usp=sharing)、[作業](https://drive.google.com/file/d/16owhcKfR78byfLS4A4GbKft1XmPlpvyc/view?usp=sharing)