一.匯入庫
import numpy as np
二.創建
1.numpy中只有一種資料型別:ndarray,表示n維陣列
創建ndarray陣列:
-由串列或者元組型別創建陣列
-有元組型別創建陣列
-創建特殊陣列
2.采用np.array函式來創建,語法為:
np.array(串列或元組)
將引數串列或者元組轉換成ndarray型別.相當于強制型別轉換
a=np.array([1,2,3,5,19]) 由串列創建一維陣列
b=np.array([[1,1,1],[2,2,2],[3,3,3]]) 由串列創建二維陣列
a=np.array((1,2,3,5,19)) 由元組創建一維陣列
b=np.array(((1,1,1),(2,2,2),(3,3,3))) 由元組創建二維陣列
b=np.array(([1,1,1],(2,2,2),[3,3,3])) 混搭的,,,
創建陣列時,可以用dtype指定資料型別:
a=np.array([1,2,3,5,19],dtype=np.int32)
當不指定dtype的時候,numpy會根據資料自動匹配合適的型別
三.陣列型別的屬性
生成一個陣列 : b=np.array([[1,1,1],[2,2,2],[3,3,3]])
.ndim:資料是幾維的:b.ndim的值為2
.shape:資料的形狀,即尺寸:b.shape的結果為(3,3)
.size: 陣列中元素的數量 b.size的值為9
.dtype: 陣列元素的資料型別 b.dtype 的結果為 int32
.itemsize:陣列中元素所占的位元組數
四.利用函式創建特殊陣列
1.全零陣列
①np.zeros(shape, dtype = float)
shape為陣列的形狀,是串列型別或者元組型別
dtype是資料的型別,可以是整數或者實數,該引數可以省略
例子:a=np.zeros((3,3),dtype=int),則a里面是一個3*3的全零陣列
②np.zeros_like(a)
a為一個已知的陣列,np.zeros_like(a)生成一個與a形狀相同的全零陣列
a=np.array([[1,2],[2,3],[3,5]]) # a是一個三行兩列的矩陣
則np.zeros_like(a) 生成一個三行兩列的全零陣列
2.全1陣列
①numpy.ones(shape, dtype)
np.ones: 創建指定形狀的陣列,陣列元素以 1 來填充
例如:np.ones([5,5],dtype=np.int32) #五行五列全是1的陣列
②np.ones_like(a)
引數a為一個已知的陣列,該函式根據陣列a的形狀生成一個全1的陣列
3.全是某個值的陣列
①np.full(shape,fill_value)
根據指定的shape生成一個全是fill_value的陣列
例如:np.full((4,7),8) #四行七列全是8的陣列
②np.full_like(a,8) 生成一個與陣列a相同,且里面元素都是8的陣列
5.np.eye生成單位矩陣
np.eye(n)
生成一個n行n列的單位矩陣
6.np.arange選定數值范圍創建陣列
語法 np.arange(start, stop, step, dtype)
start :起始值,默認為0
stop : 終止值(不包含)
step : 步長,默認為1
dtype :型別,可以省
例子:
np.arange(10) #輸出array([0,1,2,3,4,5,6,7,8,9])
np.arange(2,15) #輸出array([2,3,4,5,6,7,8,9,10,11,12,13,14])
np.arange(3,20,5) #輸出array([3,8,13,18])
c=np.arange(9).reshape(3,3) #輸出array([[0, 1, 2],
[3, 4, 5],
[6, 7, 8]])
注意:使用np.arange生成的陣列都是一維的,如何變成多維呢?使用陣列的reshape方法
例如:np.arange(100).reshape(10,10)
方法的呼叫!!!! 用變數名.方法名
七.創建線性一維陣列
np.linspace(start, stop, num=50, endpoint=True, retstep=False, dtype=None)
start : 序列的起始值
stop : 序列的終止值,如果endpoint為true,該值包含于數列中
num : 要生成的等步長的樣本數量,默認為50
endpoint : 該值為True時,數列中包含stop值,反之不包含,默認是True
retstep : 如果為True時,生成的陣列中會顯示間距,反之不顯示
dtype : ndarray的資料型別
例如:a = np.linspace(1,10,10) array([1., 2., 3., 4., 5., 6., 7., 8., 9., 10.])
八.生成隨機陣列
1.numpy中有個亂數子庫,叫做np.random,
里面包含很多亂數生成演算法,使用的時候,采用 np.random.方法名 的形式去使用,
①np.random.rand(d0,d1,...dn) 根據d0,d1,...dn的值生成[0,1)之間均勻分布的隨機陣列,
②np.random.randn(d0,d1,...dn) 根據d0,d1,...dn的值生成[0,1)之間標準正太分布的隨機陣列,
③np.random.randint(low,high,shape)在[low,high)區間生成shape形狀的隨機陣列
例如:np.random.randint(1,10,[5,5])
np.random.randint(1,10) 生成1-10之間的隨機整數(一個整數)
④np.random.seed(s) 亂數種子函式 : 引數必須是整數型別
⑤np.random.shuffle(a) 把陣列a打亂順序
⑥np.random.choice(a,size,replace=False)
解釋:從陣列a中,隨機等概率選取資料,構成shape形狀的陣列,
當replace的值默認為True,此時,資料可以被重復選取,當不希望重復選取資料的時候,修改replace=False
⑦np.random.uniform(low,high,size):在[low,high)之間等概率的抽取元素,產生形狀為size的陣列,
⑧np.random.normal(loc,scale,size):產生均值為loc,方差為scale的尺寸為size的符合正態分布的陣列
⑨np.poisson:生成泊松分布的陣列
九.陣列的變換-改變形狀
1.reshape函式: 改變陣列的形狀,不改變陣列元素的個數,原陣列不變,生成一個和原陣列資料一樣的新陣列,
有兩種reshape,一種是np的函式,一種是陣列的方法.
假設a=np.arange(100), 則a為含有100個元素的一維陣列,則改變a為10*10的陣列,
方法有:
b=np.reshape(a,(10,10)) # np的函式
b=a.reshape(10,10) # 陣列的方法
b=a.reshape((10,10))
執行完上面的代碼后,b為10*10的陣列,而a還是含有100個元素的1維陣列
2.resize((shape),refcheck=True) #refcheck默認是true,自身呼叫時須改成false
功能與reshape相同,但是改變原陣列
a.resize((1,9)) a變為一維陣列了,
①當resize()是用np呼叫的時候,這時需要第一個引數是矩陣本身,然后記得加括號,是改正后 的矩陣維度, 這時有回傳值,可以列印出
例如:>>>a=np.arange(100)
>>> b=np.resize(a,(1,9))
>>> b
輸出:array([[0, 1, 2, 3, 4, 5, 6, 7, 8]])
②當resize()是矩陣自己呼叫自己時,函式沒有回傳值,因此是None,但是也改變了ndarray的值,
這時再列印ndarray就是被resize()改變后的值 ***自身呼叫時,refcheck=False
例如:>>>a=np.arange(100)
>>>a.resize((1,9),refcheck=False)
>>>a
結果:array([[0, 1, 2, 3, 4, 5, 6, 7, 8]])
十.陣列的變換-扁平化
1.flatten()函式,陣列扁平化,也就是把多維陣列變成一維陣列,但是原陣列不變,
假設a是一個二維陣列,則a.flatten(),得到一個按行展開的一維陣列
例如:>>>a=np.random.randint(1,5,[3,3])
>>>a
結果:array([[4, 2, 2],
[4, 1, 1],
[1, 3, 2]])
>>>a.flatten()
結果:array([4, 2, 2, 4, 1, 1, 1, 3, 2])
>>>a
結果:array([[4, 2, 2],
[4, 1, 1],
[1, 3, 2]])
2.a.astype()函式 改變型別的函式
b=a.astype(np.float16),生成一個新陣列,新陣列中與原陣列元素相同,型別不同,
注意:原陣列型別不發生變化
例如:>>>a=np.random.randint(1,5,[3,3])
>>>a
結果:array([[4, 2, 4],
[2, 3, 4],
[1, 1, 4]])
>>>a.astype(np.float16)
結果:array([[4., 2., 4.],
[2., 3., 4.],
[1., 1., 4.]], dtype=float16)
>>>a
結果:array([[4, 2, 4],
[2, 3, 4],
[1, 1, 4]])
3.a.tolist()函式 把陣列a變成串列
a.T 與a.transpose() 陣列的轉置 ,都不改變原陣列
例如:>>>a=np.random.randint(1,5,[3,3])
>>>a
結果:array([[4, 4, 4],
[3, 4, 2],
[3, 3, 1]])
>>>a.tolist()
結果:[[4, 4, 4], [3, 4, 2], [3, 3, 1]]
>>>a.T
結果:array([[4, 3, 3],
[4, 4, 3],
[4, 2, 1]])
>>>a.transpose()
結果:array([[4, 3, 3],
[4, 4, 3],
[4, 2, 1]])
>>>a
結果:array([[4, 4, 4],
[3, 4, 2],
[3, 3, 1]])
十一.常用函式及其使用
1.統計函式
使用方法:①np.函式名 ②陣列變數.函式名
|
sum |
求和 |
|
mean |
求平均值 |
|
std |
求標準差 |
|
var |
求方差 |
|
median |
求中位數 |
|
max |
求最大值 |
|
min |
求最小值 |
|
average() |
加權平均數 |
舉例:
求和:
np.sum(a) 和 a.sum(): 求陣列a中所有元素的和,
np.sum(a,axis=0)和 a.sum(axis=0) : 對陣列a按行求和
np.sum(a,axis=1)和 a.sum(axis=0) : 對陣列a按列求和
求均值
np.mean(a)和a.mean() 求陣列a中所有元素的均值
np.mean(a,axis=0)和a.mean(axis=0) 求陣列a中所有列的均值
np.mean(a,axis=1)和a.mean(axis=1) 求陣列a中所有行的均值
其它統計函式的用法類似
2.數學函式
|
np.sin() |
正弦 |
|
np.cos() |
余弦 |
|
np.tan() |
正切 |
|
np.arcsin() |
反正弦 |
|
np.arccos() |
反余弦 |
|
np.arctan() |
反正切 |
|
np.degree() |
將弧度轉換為角度 |
|
np.ptp(a) |
計算陣列a種最大值與最小值的差 |
3.舍入函式
|
np.around() |
四舍五入 |
|
np.floor() |
向下取整 |
|
np.ceil() |
向上取整 |
4.排序函式
np.sort(a, axis, kind):對陣列a按axis所指定的軸進行排序,排序采用kind引數指定的演算法,kind引數可以省略
十二.陣列的索引與切片
1.一維陣列的索引和切片
索引:a[0],a[-1]
切片:陣列名[起始位置:結束位置:步長] a[1:10:2]
2.多維陣列的索引和切片
索引:a[0,5,7] 多個維度之間用逗號分隔,
a[0,5,7]表示 第一維資料,選第0個,第2維資料,選第5個,第三維資料,選第7個
切片: ①選擇多行: a[起始行:結束行]
②格式: a[m:n,p:q] 第一維選擇m到n行,不包括n,第2維選擇p到q列,不包括q
3.串列做索引:
①選擇多行,把多行包裝成串列,作為索引,
如:a[[0,3]]表示選擇第0行和第3行,當選擇整行,不考慮列的時候,可以不寫列
②np.ix_函式: 能把兩個一維陣列 轉換為 一個用于選取方形區域的索引器,
實際意思就是,直接往np.ix_()里扔進兩個一維陣列[1,3],[2,4,5],就能先選1,3行,再選2,4,5列,
④布爾索引--條件索引
大于5的數: a[a>5]
能被5整除的數a[a%5==0]
既能被2整除,又大于5的數:b=a[a%2==0] c=b[b>5]
十三.ndarray型別資料的運算
1.陣列與標量(單個資料)之間的運算:相當于陣列中的每個元素與標量之間的運算,例如:a=np.arange(10).reshape(2,5) a+5,相當于a中每個元素都加了5,
2.資料規范化
如何規范化:隨機生成一個二維陣列,對陣列進行規范化,即陣列中每個元素減去陣列元素的均值除以陣列元素的方差:
a=a.mean()/a.std()
3.numpy中一元函式:作用到元素上
對陣列運算,實際上是對陣列中每個資料進行運算,
np.abs() 求陣列中各個元素的絕對值,結果可以是整數或者實數
np.fabs() 求陣列中各個元素的絕對值,結果是實數
np.sqrt() 求陣列中各個元素的平方根
np.log np.log10 np.log2 計算陣列中各個元素的自然對數、以10為底的對數, 以2為底的對數
np.ceil()和np.floor分別表示的是對陣列中各個元素進行取整
np.rint()對陣列中每個元素進行四舍五入
np.sin() np.cos() np.tan() np.cosh() np.sinh() np.tanh() 對陣列中的每個元素進行三角運算,
np.sign() 計算陣列中每個元素的符號值,結果為1,0,或-1分別表示正數,0和負數
np.exp() 計算陣列中每個元素的指數值
4.numpy中的二元函式和二元運算
兩個同尺寸的陣列加減乘除,相當于對應元素的加減乘除
np.maximum(a,b) 求兩個陣列a和b對應元素的最大值
np.minimum(a,b) 求兩個陣列a和b對應元素的最小值
np.mod(a,b) a中元素除以b中元素的余數
np.copysign(x,y) 將陣列y中各元素的符號賦值給x中元素的符號
關系運算子號:> 、>=、< 、<= 、 ==、 !=對應元素進行比較
a[a>b] 在a中找出比陣列b大的數
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/146279.html
標籤:Python
上一篇:求幫忙,這個有點迷奧
下一篇:macos 安裝frida的坑
