# Numpy
###### tags: `人生苦短,我學Python`
## 定義屬性
1. 強大的多維類別類型
2. 矩陣廣播運算的特性
3. 底層集成 C/C++ 和 Fortran 實作
4. 大量科學/數學計算的實作函數(線性代數、三角函數 ...)
* 不管在哪裡,載入numpy函式庫就對了,而且一般習慣命名成np
```python=
import numpy as np
```

* 由此圖可知,for迴圈並不支持浮點數。

```python=
ndarray.ndim: 陣列有多少維度
ndarray.shape: 每個維度的大小
ndarray.size: 陣列當中有幾個元素
ndarray.dtype: 陣列中的資料型態
ndarray.itemsize: 陣列中每個元素佔用的空間
ndarray.data: 陣列所存在的記憶體位置
```
----------------

```python=
testarray.tolist()
#可以試一下這個
```
## 陣列初始化
* NumPy 提供了一個同類型元素的多維容器型態,稱為是數組或陣列。

* 建立陣列
1. 從內建型態作轉換
2. 從固定大小的初始值開始
3. 從固定大小的序列值開始
4. 從固定大小的亂數值開始

**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:指定元素在記憶體中的儲存方式




----------
* 再接著往下看

* 用zeros創建了4 X 5 的二維矩陣。
test:
```python=
#換成
np.ones()
```


* 浮點數~
**使用 empty() 函式則是不需要給定起始值,但是可以建立給定形狀的陣列,元素值則會隨機給定。**
.---------------------------
* 從固定大小的序列值開始
1. 固定長度的等差序列
2. 固定區間的等差序列
3. 等比序列

```python=
numpy.logspace(start, stop, num=50, endpoint=True, base=10.0, dtype=None, axis=0)
```


* 亂數seed()

--------------------
* Structured Arrays vs RecordArray
* RecordArray 與 Structured Array 非常類似,但是提供更多的屬性可以用來存取結構化陣列。不過 RecordArray 雖然方便但是在效能上會比原來的陣列差


* 範例取自 : https://www.geeksforgeeks.org/python-numpys-structured-array/
## 陣列中不同的資料型態
* Numpy 的類型系統中,提供以下幾種型態:

* 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
```

**type是Python內建的函式,回傳數據結構(陣列)的類型
而dtype是Numpy的陣列屬性,會回傳陣列中的資料型態**
## 陣列的算術運算

-----------------
* 基礎運算


* np.trace()是計算左上到右下角這條線的sum
----------



* np.dot()高中數學