---
# System prepended metadata

title: 'Numpy #1 基本處理1'
tags: [python, 資料分析, numpy]

---

# Numpy #1 基本處理1

## 載入以及建立array

import numpy as np

a = np.array([1,2,3])
print(a)  #印出[1,2,3]
print(a.size) #會印出資料數3

## 多維陣列N-Dimensional Array(ndarray)

### 1D array

np.array 指定內容
np.empty(個數) 未指定資料
np.zeros(個數) 都是0
np.ones(個數) 都是1
np.arange(個數) 連續資料0開始
 (起始,尾巴但不包含,間隔,dtype='') 可得到指定資料
 結束如果是非整數可能會被包含
 也可以用linspace替代
 
np.linspace:
 一定要打起始結束值
 舉例：np.linspace(start, stop, num=50, endpoint=True, retstep=False, dtype=None, axis=0)
 endpoint指是否包含尾巴
 rerstep指是否顯示間隔（間隔從前面三個數據可以算出來）
 axis是看依據的軸


empty實際上會跑出該位置本來就有的東西，不一定一樣
zeros會跑出0./ones會跑出1. （預設浮點數）

### 2D array

colum列/row行

np.array([1,2], [5,6], [7,9])
3X2 三列兩行
np.empty(m,n)
np.zeros(m,n)
np.ones(m,n) 以上都是建立mXn陣列

### 3D array

np.array(
[
[
  [1,2,3] ,[6,2,5]
],

[
  [5,7,10] ,[4,1,7]

]
]
)

2X2X3 陣列

### nD array

同上，用邏輯推理（外到內）


## nd array基礎運算

### 逐元運算 - 直接一個一個對照運算，尺寸必須一樣才能做

+ - * / 
np.sqrt() 開平方根
np.e/np.exp(n)  e/e^n
np.exp(a) a也可以是陣列
np.log(a) 底e
np.log2(a) 底2
np.log10(a) 底10
np.log1p(a) 底e計算ln(a+1)
np.abs(a) 取絕對值，複數可用
> == <= （比較運算）
若尺寸不同，比較某維度若一樣，可能可以自動腦補運算（廣播原則）

### 矩陣運算

ab內積（ab相乘）： a.dot(b) 或 a@b
ab外積： np.outer(a,b)

### 統計運算

data.sum() 所有元素全部加總
data.sum(axis=n) 針對第n個維度加總　0開始
　n=0 針對column加總
　n=1 針對row加總
data.min() 最小值
data.cumsum() 逐值累加
　各元素累加
  若針對某axis，則只針對該方向累加，結果會是原來的尺寸
data.mean() 平均
data.std() 標準差
　以上都可以加入axis=n，除了cumsum之外會得到一維陣列

### 取近似
np.round(a) 四捨六入五取最近偶數，可加 decimals=n表示取到哪位
np.rint(a) 取到最近整數，相當於上面n=0
np.trunc(a) 無條件捨去
np.floor(a) 往上取整數
np.ceil(a) 往下取整數
np.fix(a) 往0方向取整數

其他運算可參考
https://numpy.org/doc/stable/reference/ufuncs.html

## 形狀Shape

同樣資料個數，可放在不同維度（形狀）內
2X3X2 = 三維，形狀是2X3X2
a.shape 取得a陣列的形狀 會輸出()
a.T 將a轉置
a.T.shape 取得a轉置之後的形狀
a.ravel() 扁平化成一維陣列 後來若變更會影響原矩陣
a.flattern() 扁平化成ㄧ維陣列
a.reshape(m,n) 重塑成mXn（資料數量必須正確）
 例如：產生2X3X3的0陣列 a=np.zeros(18).reshape(2,3,3)
 後者修改會影響前面
 n=-1可以讓電腦自己算
a.resize(m,n) 同上，但多出來的會變成0，不夠的話就擷取前半部
重塑預設都是order='C'（by row），亦可改成'F'（by column）
重塑之後的陣列值改變，會連帶影響原來陣列
以上都需要指定變數得到，程式不會自動覆蓋a
以上都可以改成np.XXX(a)
關於shape可參考此圖
![](https://i.imgur.com/8NSLwmz.png)


## 索引index & 切片

類似list 0開始
a[m,n,....] 取得某一個位置資料
 順序同shape
a[m:n] 取得m~n-1的一串資料
 m省略代表0 n省略代表最後+1
 若多維度 一樣用,隔開
 ...代表該維度或剩下維度或之前的維度全部都要
 多一個:step 代表間隔多少取一次，負的代表反向
 
## 合併stacking

np.stack((a,b), axis=n) 除預設指定n=0可以不寫ab形狀需完全一樣

concatenate((a,b), axis=n) 合併第n+1個維度，預設0可不寫
np.vstack((a,b)) 合併第一個維度，其他維度不動
np.hstack((a,b)) 合併第二個維度，其他維度不動
 尺寸會將合併的維度加起來，其他不變
 例如2X3合併2X3
 vstack會得到(2+2)X3
 hstack會得到2X(3+3)
以上三個除了指定的軸之外，其他形狀要完全一樣
 
## 其他語法參考

產生一些隨機陣列
http://cumatrixfile.cupoy.com/000001754907C97F0000001A6375706F795F72656C656173654349/marathon/1602735560909
＊np.random.seed() 括號裡面的數固定，表示之後每次隨機生成的數字順序固定
＊也可以在後面指定隨機分佈型態

其他相關語法 (軸數、資料型態、顯示實虛部...)
http://cumatrixfile.cupoy.com/000001754907C97F0000001A6375706F795F72656C656173654349/marathon/1602735560910


###### tags: `資料分析` `numpy` `python` 