# 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可參考此圖

## 索引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`