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