Python3---numpy

韓總說發表於2020-10-03

前言

近日梳理python3 的numpy的相關知識點,故自我整理成筆記釋出,一是供大家評論和建議,查缺補漏自我知識框架,二是可以進一步熟悉知識,達到更好的融匯貫通的情況,希望看到的兄弟姐們可以不吝賜教,感激不盡!

1.維度

一維陣列
二維陣列
三維陣列

2.基本屬性

2.1陣列建立

1)列表轉換

import numpy as np
list=[[1,2],[3,4],[5,6]]
t=np.array (list2)
print(t)

2)arange函式

import numpy as np
t=np.arange(24).reshape(4,6)
print(t)

2.2陣列的屬性

查詢陣列的維度 print(t.ndim)
查詢元素的個數 print(t.size)

1)形狀

查詢 print(t.shape)

2)改變
(1)原有的基礎更改

t.shape=(3,2)
print(t)

(2)新設定的陣列更改
x=t.reshape(3,2)
print(x)

3)改變維度
(1)通過行的方式
print(t.reshape((6,)))

(2)通過列的方式
print(t.reshape((5,),order=‘F’) ) # 5代表是5個元素,預設是以行展開,order='F’是以列展開的意思

4)陣列轉化為list
print(t.tolist())

3.陣列計算

3.1軸與廣播機制
一維陣列(axis=0)
二維陣列
axis=0代表列;axis=1代表行
三維陣列
axis=0代表高;axis=1代表列;axis=2代表行
3.2陣列&數
print(t+/-/*//數字)

3.3陣列&陣列
1)同種形狀的陣列
print(±*/陣列,axis=0/1)

2)不同形狀,只能和一維陣列進行計算,並且一維陣列的行/列其中一個,必須和多維陣列相同,否則不同形狀陣列不能進行計算

3.4常用函式
np.max/min(t1)
print(np.max/minimum (t1,t2))兩者相比取最值
np.mean(t)取平均值
print(t.cumsum(0)) 列求和
等等

4.陣列的CRUD

4.1索引和切片(查詢)
1)一維陣列
t=np.arange(10)

(1)冒號分隔切片引數 start:stop:step來進行切片操作
print(t[2:7:2])# 從2-7,每間隔兩個進行取數

(2)如果只放置一個引數,如[2],將返回與該索引相對應的單個元素
print(t[2], t)

(3)如果為[2:],表示從該索引開始以後的所有項都將被提取
print(t[2:])

2).二維陣列
(1)取值
a.取連續的行
單一行
print(t[0])
print(t[0,:])
多行
取第二行到最後 print(t[1:])
取第二行到第三行print(t[1:3])
取第二行,第四行,第六行 print(t[[1,3,5]])
b.取連續的列
單一列
print(t[:,1])
多列
取第二列到最後 print(t[:,1:])
取第二列到第三列print(t[:,1:3])
取第二列,第四列,第六列 print(t[[:,1,3,5]])
c.取不連續的值
取某一個值print(t[3,2])
取多個不連續的值print([[0,1],[2,3]])
3)修改
(1)賦值
t[1:]=0
t[[0,1],[2,3]]=0
(2)邏輯
t[(t>10)&(t<23)]=0 和
t[(t>10)|(t<23)]=0 或
t[~(t>10)]=0 非
4.2新增(軸)
1)新增
print(np.append(a,[5,3]))
print(np.append(a,[[5,3]],axis=0))
print(np.append(a,[[5,3],[1,6]],axis=1))
(1)指定位置插入
print(np.insert(a,1,11,axis=1))
print(np.insert(a,1,[11],axis=0))
2)拼接
print(np.concatenate((t1,t2),axis=0))
(1)堆疊
print(np.stack((t1,t2),axis=0))
3)分割
print(np.split(t1,2))
4.3刪除
print(np.delete(a,2,axis=0))
4.4去重
arr:輸入陣列,如果不是一維陣列則會展開
retur_ index:如果為true,返回新列表元素在舊列表中的位置(下標),並以列表形式儲
return_ Inverse:如果為true,返回舊列表元素在新列表中的位置(下標),並以列表形式儲
return_ counts:如果為true,返回去重陣列中的元素在原陣列中的出現次數
a=np. array([[1,2,5],[3,4,6],[1,4,2]])
u=np.unique(a)
u,indices=np.unique(a, return_counts=True)
print(u) 輸出去重後的展開陣列
print(indices) 輸出對應出現的次數

5.NAN處理

5.1特徵
資料型別:float
nan!=nan
nan與任何數計算都是nan

5.2判斷nan
print(t=t)
print(np.isnan)
檢視nan的數量 print(np.count_nonzero(t!=t))

5.3處理nan
1)刪除(不影響資料的情況)
2)填充(平均數、中位數等)
遍歷陣列,判斷nan的個數是否為0;
不為0,取出存在nan那一行/列的非nan資料
對非nan資料求平均數/中位數
賦值給nan

5.4案例

import numpy as np
t=np,arange(24).reshape(4,6)
t[2,3,6]=np.nan
for i in range (t.shape[1]): #遍歷所有列,行則為(t.shape[0])
	a=t[:,i]                #將每一列資料取出
	b=np.count_nonzero(a!=a) #判斷每一列中存在nan的個數
	if b!=0:                 #如果個數不為0
		c=np.mean(a[a==a])  #則取出存在nan列中不為nan的數並求平均值
		a(np.isnan(a))=c    #將平均值賦值給nan
print(t)

另,筆者能力有限,若文章出現錯誤,也拜託大佬在評論區指出,馬上進行更改,不要因為筆者能力問題造成影響,誤人子弟;
**

本文未經本人允許,禁止轉載,違者必究,歡迎關注!

掃碼關注公眾號:“韓總說”,我們一起見證成長!公眾號後臺回覆 7701,可獲得本篇文章思維導圖一份~~

**
在這裡插入圖片描述