---
# System prepended metadata

title: Numpy

---

# Numpy
參考資料：https://numpy.org/doc/stable/reference/
## np.array([])
若要製造一個矩陣，可使用此函式。
## array.ndim
可查看array是幾維矩陣。
## array.size
可查看有多少元素在array裡。
## array.transpose() or array.T
可將矩陣轉置，row變成column，column變成row。
```python=
import numpy as np
arr = np.array([[1,2,3],[4,5,6],[7,8,9])
print(arr)
#output
#[[1 2 3]
#[4 5 6]
#[7 8 9]]
print(arr.transpose())
#output
#[[1 4 7]
#[2 5 8]
#[3 6 9]]
```
## np.ones((i,j))
可製造一個i\*j且內容皆為1的矩陣。
## np.zeros((i,j))
可製造一個i\*j且內容皆為0的矩陣。
## dtype
dtype可以在許多函式裡當參數，例如在np.array()、np.ones()、np.zeros()裡都可以加入此參數，此參數的功用是使矩陣裡可以使用dtype裡的型態，例如:
```python=
import numpy as np
arr = np.array([1,2,3],[4,5,6],[7,8,9],dtype = float)
print(arr)
a = np.zeros((2,3),dtype = int)
print(a)
print(arr.dtype)#output:float64
```
## np.linspace(-np.pi, np.pi, num=100, endpoint=True)
第一個參數為起始數，第二個參數為終止數，第三個參數為共有幾個點，第四個參數為是否包含np.pi。
```python=
import numpy as np
a = np.linspace(1,10,5,endpoint = True)
b = np.linspace(1,10,5,endpoiont = False)
print(a)
print(b)
```
## np.arange()
np.arange(n)#產生0~n-1的數
np.arange(m,n,step)#產生m到n-1，step代表間隔為多少。
## np.argmin and np.argmax
找出矩陣裡最小和最大的索引
```python=
import numpy as np
arr = np.array([[1,2,3],[4,5,6],[7,8,9]],dtype = float)
min_idx = np.argmin(arr)
max_idx = np.argmax(arr)
print(min_idx)
print(max_idx)
```
## np.empty()
將一個矩陣做宣告，但沒有初始化。
## np.median()、np.mean()、np.cumsum()
np.median()矩陣中尋找中位數
np.mean()得矩陣的平均
np.cumsum()累加
```python=
import numpy as np
arr = np.array([[1,2,3],[4,5,6],[7,8,9]])
summ = np.cumsum(arr)
print(summ)#[ 1  3  6 10 15 21 28 36 45]
```
## np.reshape()
重新塑造矩陣的形式。
## np.astype()
強制更換型態。
## np.newaxis
增加一個維度。
```python=
import numpy as np
x = np.linspace(-1,1,30)[:,np.newaxis]
print(x)
```
## array.itemsize & array.nbytes
```python=
import numpy as np

a = np.array([[1,2,3],[4,5,6]])
print(a.itemsize)
print(a.nbytes)
```
itemsize是指每一個元素的記憶體使用量，而nbytes是array裡所有元素的記憶體使用量。
## array.flatten() & array.ravel()
將原本多維陣列打平成一維陣列。
```python=
import numpy as np

a = np.array([[1,2,3],[4,5,6]])
b = a.flatten()
print(b)

print('==============')

x = np.array([[1,2,3],[4,5,6]])
y = x.ravel()
print(y)
```
array.flatten() 和 array.ravel()有個叫order的引數，預設為C，常用的引數值有 C 和 F，C代表C-stytle，是以row為主的展開，而F代表Fortran-style，是以column為主的展開。
```python=
import numpy as np

a = np.array([[1,2,3],[4,5,6]])
b = a.flatten(order = 'C')
print(b)
c = a.flatten(order = 'F')
print(c)

print('==============')

x = np.array([[1,2,3],[4,5,6]])
y = x.ravel(order = 'C')
print(y)
z = x.ravel(order = 'F')
print(z)
```
## 合併array
### concatenate
將兩個ndarray做合併，要注意，兩個ndarray要有一樣的shape。
```python=
import numpy as np

a = np.array([[1,2,3],[4,5,6],[7,8,9]])
b = np.array([[10,11,12],[13,14,15],[16,17,18]])

print(np.concatenate((a,b)))
```
## where
<span style = color:red>numpy.where(condition[, x, y])</span>
```python=
import numpy as np

a = np.random.randint(-50,50,50)
print(a)
print(np.where(a > 0,'T','F'))
```
## 四則運算
np.add():相加
np.substract():相減
np.multiply():相乘
np.divide():相除
np.mod():取餘數
```python=
import numpy as np
a = np.array([1,2,3,4,5])
b = np.array([5,10,15,20,25])
print(np.add(a,b))
print(np.subtract(a, b))
print(np.multiply(a,b))
print(np.divide(a,b))
print(np.mod(a,b))
```
## 數據分析
```python=
import numpy as np
math = np.array([80,50,68,74,88])
print('Math:')
print('平均:',np.nanmean(math))
print('最高分:',np.nanmax(math))
print('最低分:',np.nanmin(math))
print('標準差:',np.nanstd(math))
print('變異數:',np.nanvar(math))
print('相關係數:',np.corrcoef(math))
```
## dot() && @
運算內積的方式。
```python=
import numpy as np

ham = np.array([1,2,3])
egg = np.array([4,5,6])

print(np.dot(ham, egg))# output : 32
print(ham @ egg)# output : 32
```
## np.exp 自然指數函數
如果有在做ML的話，可能會運用到softmax，其中原理就是將所有輸入的資料進入一個轉換，然後相加等於1，那我們會用到exp做轉換，雖然整體轉換過程不是只用到exp，但是exp是一個非常重要的過程。
exp在數學中就是自然指數函數，用法如下:
```python=
import numpy as np

a = 2.7
b = 1.3
c = -4

arr = np.array([a,b,c])

result = np.exp(arr)
print(result)
```