一、創建ndarray
*ndarray是NumPy中表示數組的重要類型
1、使用np.array()創建
*參數列表:[1,2,3,4]
注:(1)、numpy默認ndarray的所有元素的類型是相同的 ? (2)、如果傳入的數據類型不同,會被按照優先級強制轉換為同一類型,其中優先級為 ? str >float >int ? (3)、ndarray常見的數據類型:int: int8、uint8、int16、int32、int64float:float16、float32、float64str:字符串
a = [1,2,3,4,5] n = np.array(a) print(n) #顯示類型 print(type(n)) #顯示形狀 print(n.shape)
2、使用np的routines函數創建
(1)、np.ones(shape,dtype = None,order = 'C')
*創建一個所有元素都為1的多維數組
參數說明:
-
shape:形狀
-
dtype=None,元素類型
order:{‘C’,‘F’},可選,默認值:C是否在內存中以行主或列主順序存儲多維數據,一般默認
n = np.ones(shape=(3,),dtype = np.int8)
(2)、np.zeros(shape,dtype = float,order = 'C')
*創建一個所有元素都為0的多維數組
參數說明:
-
*shape:形狀
-
*dtype = None:元素類型
n = np.zeros(shape = (5,5),dtype = np.int16)
(3)、np.full(shape,fill_value,dtype = None,order = 'C')
*創建一個所有元素都為指定元素的多維數組
參數說明:
-
*shape:形狀
-
*fill_value:填充值
-
*dtype = None:元素類型
n = np.full(shape = (3,4),fill_value = 8)
(4)、np.eye(N,M=None,k=0,dtype=float)
*對角線為1其他位置為0的二維數組
參數說明:
-
*N:行數
-
*M:列數,默認為None,表示和行數一樣
-
*k :主對角線向右偏移的位置
-
*dtype = None:元素類型
n = np.eye(9,9,k=3)
(5)、np.linspace(start,stop,num = 50,endpoint = True,restep = False,dtype = None)
*創建一個等差數列
參數說明:
-
start:開始值
-
stop:結束值
-
num= 50:等差數列中默認有50個數
-
endpoint = True:是否包含結束值
-
restep = False:是否返回等差值(步長)
-
dtype = None:元素類型
n = np.linspace(1,9,5) print(n)
(6)、np.arange(start,stop,step,dtype = None)
*創建一個數值范圍的數組
*和Python中range功能類似
參數說明:
start:開始值
stop:結束值(不包含)
step:步長
dtype = None:元素類型
n = np.arange(2,10,2) print(n)
(7)、np.random.randint(low,high = None,size = None,dtype = None)
*創建一個隨機整數的多維數組
參數說明:
-
low:最小值
-
high:None:最大值
-
-
注:high=None時,生成的數值在(0,low)之間
-
如果使用high這個值,則生成的數值在(low,high)之間
-
-
size = None:數組形狀,默認只輸出一個隨機值
-
dtype = None:元素類型
#隨機整數:單個數 n = np.random.randint(3,10) print(n) #隨機整數:一維數組 n = np.random.randint(3,10,size=6) print(n) #隨機整數:二維數組 n = np.random.randint(3,10,size=(3,4)) print(n) #隨機整數:三維數組 n = np.random.randint(0,256,size=(20,40,3)) print(n)
(8)、np.random.randn(d0,d1,......,dn)
*創建一個服從標準正態分布的多維數組
*創建一個所有元素都為1的多維數組
參數說明:
-
dn:第n個維度的值
n = np.random.randn(1,2,3) print(n)
(9)、np.random.normal(loc = 0.0,scale = 1.0,size = None)
*創建一個服從正態分布的多維數組
參數說明:
-
loc:均值
-
scale:標準差,對應分布的寬度,scale越大,正態分布的曲線越矮胖,scale越小,曲線越高瘦
-
size = None:數組形狀
n = np.random.normal(10,0.5,size=(3,4)) print(n)
(10)、np.random.random(size = None)
*創建一個元素為0~1(左閉右開)的隨機數的多維數組
參數說明:
-
size= None:數組形狀
n = np.random.random(size=(3,4)) print(n)
(11)、np.random.rand(d0,d1,......,dn)
*同np.random.random(size = None)
*創建一個元素為0~1(左閉右開)的隨機數的多維數組
參數說明:
-
dn:第n個維度的數值
n = np.random.rand(3,4) print(n)
二、ndarray的屬性
1、ndim(維度)
n = np.random.rand(3,4) print(n) w = n.ndim print(w)
2、shape(形狀)
*三個數字分別表示各個維度的長度
n = np.random.rand(3,4) print(n) w = n.ndim print(w) x = n.shape print(x)
3、size(總長度)
*即:行和乘列和
n = np.random.rand(3,4) print(n) w = n.ndim print(w) x = n.shape print(x) c = n.size print(c)
4、dtype(元素類型)
n = np.random.rand(3,4) print(n) w = n.ndim print(w) x = n.shape print(x) c = n.size print(c) l = n.dtype print(l)
三、ndarray的基本操作
1、索引
一維和列表索引的操作一致。
2、 根據索引修改數據
(1)、將第二行全部數字改為0.88
n= np.random.rand(3,4) print(n) #將第二行全部數字改為0.88 n[1]=0.88 print(n)
(2)、將第二行最后一個數改為0.88
a= np.random.rand(3,4) print(a) #將第二行最后一個數改為0.88 a[1][3]=0.88 print(a)
3、切片
import numpy as np #列表有逗號間隔 # I = [1,2,3,4,5,6,7,8] # a = I[2:6] # b = I[::-1] #翻轉 # print(a) # print(b) # #數組沒有逗號間隔 # n = np.array(I) # a = n[2:6] # print(n) # print(a)#對于二維數組的行切片 n = np.random.randint(0,10,size=(6,8)) # #取一行 # print(n[0]) # #連續取多行 # print(n[1:4]) # #取不連續多行 # print(n[[1,2,4]])#對于二維數組的列切片 n = np.random.randint(0,10,size=(6,8)) print(n) #取一列 print(n[:,0]) #取第一列 print(n[1:4,0]) # 取第二到第四行的第一列 #取連續的多列:切片 print(n[:,2:5]) #取第三到第五列的所有行 #取不連續的多列:中括號 print(n[:,[1,3,4]]) #取第二列和第四列和第五列的所有行
4、翻轉
(1)、行翻轉
n[::-1]
(2)、列翻轉
n[:,::-1]
5、變形
使用reshape函數
import numpy as npn = np.arange(1,21) print(n)#reshape:將數組改變形狀 變成二維 a = np.reshape(n,newshape=(4,5)) print(a)#使用-1:表示任意剩余維度長度 e = n.reshape(4,-1) print(e) r = n.reshape(-1,2) print(r)
6、級聯(合并)
#級聯(合并) a = np.concatenate((n1,n2)) #上下合并 print(a)l = np.concatenate((n1,n2),axis=0) #上下合并 print(l)p = np.concatenate((n1,n2),axis=1) #左右合并 print(p)#左右合并 i = np.hstack((n1,n2)) print(i)#上下合并 u = np.vstack((n1,n2)) print(u)
7、拆分
(1)、np.split()
(2)、np.hsplit()
(3)、np.vsplit()
import numpy as npn = np.random.randint(0,100,size=(4,4)) print(n) a = np.split(n,4) print(a) b = np.hsplit(n,4) print(b) #垂直拆分,平均拆成3份 c = np.vsplit(n,4) print(c) #按照指定位置拆分 d = np.vsplit(n,(1,2,4)) print(d) #水平拆分 e = np.hsplit(n,4) print(e) print() #split:做水平和垂直拆分 #axis = 0:行 #axis = 1:列 a = np.split(n,4) a = np.split(n,4,axis=0) print(a) print() m = np.split(n,4) m = np.split(n,4,axis=1) print(m)
8、拷貝
import numpy as np#n2不會隨著n的變化而變化 n = np.random.randint(0,10,size=(2,3)) n2 = n.copy() n[0][0] = 0 print(n2) print(n)#注:如果用n3 = n,則n2會隨著n的變化而變化 n3 = n print(n3)
四、numpy的聚合操作
1、求和np.sum()
import numpy as npn = np.arange(10) print(n)s = np.sum(n) print(s)n = np.random.randint(0,10,size=(3,5)) print(n) s1 = np.sum(n) print(s1) #全部數加起來 s2 = np.sum(n,axis=0) print(s2) #表示每一列的多行求和 s3 = np.sum(n,axis=1) print(s3) #表示每一行的多列求和
2、最小值np.min
3、最大值np.max
4、平均值np.mean
5、平均值np.average
6、中位數np.median
7、百分位數np.percentile
8、最小值對應的下標np.argmin
9、最大值對應的下標np.argmax
10、標準差np.std
11、方差np.var
12、次方,求冪np.power
13、按條件查找np.argwhere
14、np.nansum
-
*nan:數值類型,not a number:不是一個正常的數值,表示空
-
*np.nan:float類型
#對于含有空的數組,要用np.nansum進行求和 n = np.array([1,2,3,np.nan]) print(n) #實質是去掉空值后的數組進行求和 s4 = np.nansum(n) print(s4)
五、矩陣操作
1、基本的矩陣操作
算術運算符:加減乘除
矩陣和矩陣之間運算
數與矩陣運算
2、矩陣乘積
np.dot(第一個矩陣的列數等于第二個矩陣的行數)
import numpy as npn1 = np.random.randint(0,10,size=(4,4)) n2 = np.random.randint(0,10,size=(4,5)) print(n1,n2) print() n3 = np.dot(n1,n2) print(n3)
3、矩陣的逆
n4 = np.linalg.inv(n2) print(n4)
4、行列式的計算
n5 = np.round(np.linalg.det(n1)) print(n5)
5、矩陣的秩
n6 = np.linalg.matrix_rank(n1) print(n6)
六、ndarray的廣播機制
(1)、為缺失的維度補維度
(2)、缺失元素用已有的數組填充
import numpy as npx = np.full(shape=(3,3),fill_value=2) print(x) y = np.arange(3) print(y) z = x+y print(z) #注:第二個數組會自動補上兩行[0 1 2],然后在進行相加
七、數學操作
import numpy as npn = np.array([1,2,3,5,5,44,55,66])#絕對值 print(np.abs(n)) #平方根 print(np.sqrt(n)) #平方 print(np.square(n)) #指數 print(np.exp(n)) #自然對數 print(np.log(n)) #以2為底的對數 print(np.log2(n)) #以10為底的對數 print(np.log10(n)) #正弦函數 print(np.sin(n)) #余弦函數 print(np.cos(n)) #正切函數 print(np.tan(n)) #向上取整 print(np.ceil(n)) #四舍五入 print(np.round(n,2)) #向下取整 print(np.floor(n)) #累加 print(np.cumsum(n))
八、ndarray的排序
1、np.sort()
不改變輸入
import numpy as npn = np.array([55,44,8,2,9,7,3,6]) print(np.sort(n)) print()
2、ndarray.sort()
本地處理,不占用空間,但不改變輸入
import numpy as npn1 = np.random.randint(0,10,size=8) print(n1) n1.sort() print(n1)
九、文件操作
1、保存數組到npy或npz文件
save:保存ndarray到一個npy文件。
savez:將多個array保存到一個npz文件中。
import numpy as npx = np.arange(5) y = np.arange(10,20)np.save('x',x) np.savez('arr.npz',xarr = x,yarr = y)
a = np.load('x.npy') b = np.load('arr.npz')['yarr']print(a) print(b)
2、保存數組到csv或txt文件
n = np.random.randint(0,10,size=(3,4)) #存儲到csv或txt #delimiter = ',':分隔符 np.savetxt('arr.csv',n,delimiter=',') #讀取csv或txt #注:最新版numpy不能用dtype要用astype c = np.loadtxt('arr.csv',delimiter=',').astype(np.int8) print(c)