# Numpy ###### tags: `人生苦短,我學Python` ## 定義屬性 1. 強大的多維類別類型 2. 矩陣廣播運算的特性 3. 底層集成 C/C++ 和 Fortran 實作 4. 大量科學/數學計算的實作函數(線性代數、三角函數 ...) * 不管在哪裡,載入numpy函式庫就對了,而且一般習慣命名成np ```python= import numpy as np ``` ![](https://i.imgur.com/q6Ouf4P.png) * 由此圖可知,for迴圈並不支持浮點數。 ![](https://i.imgur.com/Y5WLxrd.png) ```python= ndarray.ndim: 陣列有多少維度 ndarray.shape: 每個維度的大小 ndarray.size: 陣列當中有幾個元素 ndarray.dtype: 陣列中的資料型態 ndarray.itemsize: 陣列中每個元素佔用的空間 ndarray.data: 陣列所存在的記憶體位置 ``` ---------------- ![](https://i.imgur.com/eyApj9l.png) ```python= testarray.tolist() #可以試一下這個 ``` ## 陣列初始化 * NumPy 提供了一個同類型元素的多維容器型態,稱為是數組或陣列。 ![](https://i.imgur.com/flnzUU5.png) * 建立陣列 1. 從內建型態作轉換 2. 從固定大小的初始值開始 3. 從固定大小的序列值開始 4. 從固定大小的亂數值開始 ![](https://i.imgur.com/Op3RF5w.png) **numpy.array(object, dtype=None, *, copy=True, order='K', subok=False, ndmin=0, like=None) <-參數** 1. object:必填,任何 array_like 物件 1. dtype:指定轉成陣列後的元素型態 1. copy:預設為 True,是否產生一個新的物件 1. order:指定元素在記憶體中的儲存方式 ![](https://i.imgur.com/ipX7gZa.png) ![](https://i.imgur.com/C5URkWO.png) ![](https://i.imgur.com/PH4XhTT.png) ![](https://i.imgur.com/aurZnRb.png) ---------- * 再接著往下看 ![](https://i.imgur.com/fjd4dlD.png) * 用zeros創建了4 X 5 的二維矩陣。 test: ```python= #換成 np.ones() ``` ![](https://i.imgur.com/agYfKX9.png) ![](https://i.imgur.com/LhN0eLN.png) * 浮點數~ **使用 empty() 函式則是不需要給定起始值,但是可以建立給定形狀的陣列,元素值則會隨機給定。** .--------------------------- * 從固定大小的序列值開始 1. 固定長度的等差序列 2. 固定區間的等差序列 3. 等比序列 ![](https://i.imgur.com/jQIFt32.png) ```python= numpy.logspace(start, stop, num=50, endpoint=True, base=10.0, dtype=None, axis=0) ``` ![](https://i.imgur.com/AXOHypS.png) ![](https://i.imgur.com/LMP5yv2.png) * 亂數seed() ![](https://i.imgur.com/mhjwkls.png) -------------------- * Structured Arrays vs RecordArray * RecordArray 與 Structured Array 非常類似,但是提供更多的屬性可以用來存取結構化陣列。不過 RecordArray 雖然方便但是在效能上會比原來的陣列差 ![](https://i.imgur.com/XRxR9i4.png) ![](https://i.imgur.com/Bl2MMNO.png) * 範例取自 : https://www.geeksforgeeks.org/python-numpys-structured-array/ ## 陣列中不同的資料型態 * Numpy 的類型系統中,提供以下幾種型態: ![](https://i.imgur.com/SsXN16y.png) * Numpy的型態與python內建的型態比起來更加細膩,目的就是為了更好的操作與儲存。 * 在 NumPy 中有幾種表示型態的方法: 1. 'int' 字串 2. 'int64' 字串 3. np.int64 物件 4. np.dtype('float64') 物件 ```python= #正確的用法如下 print(a.dtype == 'int64') # True print(a.dtype is 'int64') # False print(a.dtype is np.dtype('int64')) # True ``` ![](https://i.imgur.com/WZiNYVB.png) **type是Python內建的函式,回傳數據結構(陣列)的類型 而dtype是Numpy的陣列屬性,會回傳陣列中的資料型態** ## 陣列的算術運算 ![](https://i.imgur.com/Ee3vzCv.png) ----------------- * 基礎運算 ![](https://i.imgur.com/gTrSNMy.png) ![](https://i.imgur.com/F4UxWLa.png) * np.trace()是計算左上到右下角這條線的sum ---------- ![](https://i.imgur.com/htjLL4y.png) ![](https://i.imgur.com/P0eXuNe.png) ![](https://i.imgur.com/RMYDbAd.png) * np.dot()高中數學