本文使用的是Jupyter notebook,因此僅在開頭引入了Numpy,后續(xù)沒有引入,如果在其他編譯器中運行的話請確保引入了numpy
1 創(chuàng)建數(shù)組
import numpy as np
1.1 使用array()導(dǎo)入向量
vector = np.array([1, 2, 3, 4])
vector
array([1, 2, 3, 4])
1.2 numpy.array()也可以用來導(dǎo)入矩陣
matrix = np.array([[1, 'Tim'], [2, 'Joey'], [3, 'Johnny']])
print(matrix)
[['1' 'Tim']
['2' 'Joey']
['3' 'Johnny']]
2 創(chuàng)建Numpy數(shù)組
2.1 創(chuàng)建全0矩陣
默認情況下創(chuàng)建的類型為float64類型
zeros = np.zeros(10)
print(zeros)
print(type(zeros))
[0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]
<class 'numpy.ndarray'>
如果希望在創(chuàng)建Numpy矩陣時候強制規(guī)定一種類型,那么我們可以使用以下代碼
int_zeros = np.zeros(10, dtype=int)
print(int_zeros)
print(type(int_zeros))
[0 0 0 0 0 0 0 0 0 0]
<class 'numpy.ndarray'>
2.2 創(chuàng)建多維矩陣
創(chuàng)建的是三行四列的矩陣并且其數(shù)據(jù)類型是float64
np.zeros(shape=(3, 4))
array([[0., 0., 0., 0.],
[0., 0., 0., 0.],
[0., 0., 0., 0.]])
2.3 創(chuàng)建全1矩陣
np.ones(shape=(3, 4)) # 這里可以省略shape=,即可以直接寫成這樣:np.ones((3,4))
array([[1., 1., 1., 1.],
[1., 1., 1., 1.],
[1., 1., 1., 1.]])
2.4 創(chuàng)建一個用指定值填滿的矩陣
創(chuàng)建一個三行五列的矩陣,默認值為121
np.full((3, 5), 121)
array([[121, 121, 121, 121, 121],
[121, 121, 121, 121, 121],
[121, 121, 121, 121, 121]])
2.5 生成一個在指定范圍的矩陣
arange
接受三個參數(shù),與python中的range方法相似,arange也是前閉后開的方法,第一個參數(shù)為向量的第一個值,第二個參數(shù)為向量的最后一個值(由于是前閉后開的,因此向量的最后一個值實際上是該值減去步長),第三個參數(shù)為步長,默認為1,
np.arange(0, 20, 2)
array([ 0, 2, 4, 6, 8, 10, 12, 14, 16, 18])
2.6 將指定范圍的值均分生成向量
使用np.linespace
方法可以將Numpy矩陣進行等分,該方法的范圍是前閉后閉的
np.linspace(0, 10, 5)
array([ 0. , 2.5, 5. , 7.5, 10. ])
2.7 生成隨機數(shù)矩陣
- 生成一個長度為10的向量,里面每一個數(shù)值都是介于 0-10 之間的正數(shù),注意這里的范圍是前閉后開的
np.random.randint(0, 10, 10)
array([8, 8, 1, 8, 2, 4, 7, 3, 9, 2])
- 如果不確定每個參數(shù)代表的意思,可以加上參數(shù)名size
np.random.randint(0, 5, size=5)
array([1, 2, 2, 0, 4])
- 也可以生成一個三行五列的正數(shù)矩陣
np.random.randint(4, 9, size=(3, 5))
array([[5, 7, 7, 4, 4],
[4, 6, 7, 8, 4],
[5, 7, 6, 7, 7]])
- 也可以生成介于0-1之間的浮點數(shù)的向量或者矩陣,不用指定范圍
np.random.random(10)
array([0.06534131, 0.37071446, 0.02235879, 0.52019336, 0.21088465,
0.27516892, 0.07299309, 0.90930363, 0.38513079, 0.45422644])
np.random.random((2, 4))
array([[0.58483127, 0.38876978, 0.39987466, 0.75698103],
[0.91688914, 0.49879013, 0.28552401, 0.61492315]])
- np.random.normal()表示的是一個正太分布,normal在這里是正態(tài)的意思。
numpy.random.normal(loc = 0, scale = 1, size = shape)
的意義如下:- 參數(shù)
loc(float)
:正態(tài)分布的均值,對應(yīng)這個分布的中心。loc=0說明這是一個以Y軸為對稱軸的正態(tài)分布 - 參數(shù)
scale(float)
:正態(tài)分布的標準差,對應(yīng)分布的寬度,scale越大,正態(tài)分布的曲線越矮胖,scale越小,曲線越高廋 - 參數(shù)
size(int 或者整數(shù)元組)
:輸出的值賦在shape里,默認為None
- 參數(shù)
np.random.normal(loc=0, scale=1, size=5)
array([ 0.28137909, 0.44488236, -0.29643414, 1.06214656, -0.33401709])
3 獲取Numpy屬性
通過shape查看Numpy數(shù)組的屬性
通過.ndim
來獲取Numpy數(shù)組的維度
a = np.arange(15)
print(a.shape)
print(a.ndim)
a = a.reshape(3, 5)
print(a.shape)
print(a.ndim)
(15,)
1
(3, 5)
2
reshape方法的特別用法
如果只關(guān)心需要多少行或者需要多少列,其他由計算機自己計算,那么這個時候我們可以使用如下方法
a.reshape(15, -1)
array([[ 0],
[ 1],
[ 2],
[ 3],
[ 4],
[ 5],
[ 6],
[ 7],
[ 8],
[ 9],
[10],
[11],
[12],
[13],
[14]])
a.reshape(-1, 15)
array([[ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14]])
4 Numpy數(shù)組索引
Numpy支持類似list的定位操作,在Numpy中數(shù)組索引也是從0開始的
matrix = np.array([[1, 2, 3], [20, 30, 40]])
print(matrix)
print(matrix[0][1])
[[ 1 2 3]
[20 30 40]]
2
5 切片
Numpy支持類似list的切片操作,對于下面的代碼
-
print(matrix[:,1])
代表選中所有的行,并且列的索引是1的數(shù)據(jù) -
print(matrix[:,0:2])
代表選中所有的行,并且列的索引是0和1的數(shù)據(jù) -
print(matrix[1:3,:])
代表選中所有的列,并且行的索引是1和3的數(shù)據(jù) -
print(matrix[1:3,0:2])
代表選中行的索引是1和2,并且列的索引是0和1的所有數(shù)據(jù)
matrix = np.array([
[5, 10, 15],
[20, 25, 30],
[35, 40, 45]
])
print(matrix[:, 1])
print(matrix[:, 0:2])
print(matrix[1:3, :])
print(matrix[1:3, 0:2])
[10 25 40]
[[ 5 10]
[20 25]
[35 40]]
[[20 25 30]
[35 40 45]]
[[20 25]
[35 40]]
6 Numpy中的矩陣運算
Numpy中矩陣運算(加、減、乘、除)必須嚴格按照公式進行計算,即兩個矩陣的基本運算必須具有相同的行數(shù)和列數(shù)。
6.1 矩陣的加法與減法
myones = np.ones((3, 3))
myeye = np.eye(3)
print(myones)
temp = myones + myeye
print('plus:')
print(temp)
temp = myones - myeye
print('minus:')
print(temp)
[[1. 1. 1.]
[1. 1. 1.]
[1. 1. 1.]]
plus:
[[2. 1. 1.]
[1. 2. 1.]
[1. 1. 2.]]
minus:
[[0. 1. 1.]
[1. 0. 1.]
[1. 1. 0.]]
6.2 矩陣的點乘
矩陣真正的乘法必須滿足第一個矩陣的列數(shù)等于第二個矩陣的行數(shù),矩陣乘法的函數(shù)為dot
matrix_1 = np.array([
[1, 2, 3],
[4, 5, 6]
])
matrix_2 = np.array([
[1, 2],
[3, 4],
[5, 6]
])
print(matrix_1.shape[0] == matrix_2.shape[1])
print(matrix_1.dot(matrix_2))
True
[[22 28]
[49 64]]
6.3 矩陣的轉(zhuǎn)置
矩陣的轉(zhuǎn)置是指將矩陣中的行變?yōu)榱?/p>
a = np.array([
[1, 2, 3],
[4, 5, 6]
])
print(a.shape)
print(a.T.shape)
(2, 3)
(3, 2)
6.4 矩陣的逆
需要使用numpy.linalg.inv
函數(shù)來求逆,矩陣求逆的條件是矩陣的行數(shù)和列數(shù)必須是相同的,并且該矩陣是滿秩的
同時,原矩陣與逆矩陣的點積為單位矩陣
A = np.array([
[0, 1],
[2, 3]
])
invA = np.linalg.inv(A)
print(A)
print(invA)
print(A.dot(invA))
[[0 1]
[2 3]]
[[-1.5 0.5]
[ 1. 0. ]]
[[1. 0.]
[0. 1.]]
6.5 其他預(yù)置函數(shù)
除了上面說的那些函數(shù)之外,Numpy中還預(yù)置了很多函數(shù),使用這些函數(shù)可以作用于矩陣中的每個元素
矩陣函數(shù) | 說明 |
---|---|
np.sin(a) | 對矩陣a中的每個元素取正弦,sin(x) |
np.cos(a) | 對矩陣a中的每個元素取余弦,cos(x) |
np.tan(a) | 對矩陣a中的每個元素取正切,tan(x) |
np.sqrt(a) | 對矩陣a中的每個元素開根號,sqrt(x) |
np.abs(a) | 對矩陣a中的每個元素取絕對值 |
7 數(shù)據(jù)類型轉(zhuǎn)換
Numpy ndarray數(shù)據(jù)類型可以通過參數(shù)dtype進行設(shè)定。而且還可以使用參數(shù)astype來轉(zhuǎn)換類型,在處理文件時該參數(shù)會很實用。
注意,astype調(diào)用會返回一個新的數(shù)組,也就是原始數(shù)據(jù)的備份
比如,下面是將String轉(zhuǎn)換為float的代碼
在這個例子中,如果字符串中包含非數(shù)字類型,那么從String轉(zhuǎn)換成float會報錯
vector = np.array(["1", "2", "3"])
print(vector)
vector = vector.astype(float)
print(vector)
['1' '2' '3']
[1. 2. 3.]
8 Numpy的統(tǒng)計計算方法
Numpy中內(nèi)置了很多計算方法,其中最重要的方法及說明具體如下
- sum():計算矩陣元素的和;矩陣的計算結(jié)果為一個一維數(shù)組,需要指定行或者列
- mean():計算矩陣元素的平均值;矩陣的計算結(jié)果為一個一維數(shù)組,需要指定行或者列
- max():計算矩陣元素的最大值;矩陣的計算結(jié)果為一個一維數(shù)組,需要指定行或者列
- median():計算矩陣元素的中位數(shù)
需要注意的是,用于這些統(tǒng)計方法的數(shù)據(jù)類型必須是int或者float
matrix = np.array([
[5, 10, 15],
[20, 10, 30],
[35, 40, 45]
])
print(matrix.sum()) # 計算所有元素的和
print(matrix[0].sum()) # 計算第一行元素的和
print(matrix.sum(axis=1)) # 計算行的和,結(jié)果以列的形式展示
print(matrix.sum(axis=0)) # 計算列的和,結(jié)果以行的形式展示
210
30
[ 30 60 120]
[60 60 90]
9 Numpy中的arg運算
9.1 得到數(shù)組中最大值的下標
argmax函數(shù)就是用來求一個array中最大值的下標;簡單來說,就是最大的數(shù)所對應(yīng)的索引位置
maxIndex = np.argmax([1, 2, 4, 5, 2])
print('maxIndex = ', maxIndex)
maxIndex = 3
9.2 得到數(shù)組中最小值的下標
minIndex = np.argmin([1, 3, 2, 10, 5])
print('minIndex = ', minIndex)
minIndex = 0
9.3 打亂數(shù)組順序
x = np.arange(15, 30)
print(x)
np.random.shuffle(x)
print(x)
sortXIdx = np.argsort(x) # 對X從小到大排序,并返回索引值,注意這里并未修改數(shù)組x的狀態(tài),僅僅是將其排序后應(yīng)該位于某一位的元素的下標給出,可以對照輸出理解一下
print(x)
print(sortXIdx)
[15 16 17 18 19 20 21 22 23 24 25 26 27 28 29]
[20 29 24 22 16 19 21 23 27 18 26 15 28 17 25]
[20 29 24 22 16 19 21 23 27 18 26 15 28 17 25]
[11 4 13 9 5 0 6 3 7 2 14 10 8 12 1]
排序后第一個元素9代表的是x素組中15的索引地址,即x[9]應(yīng)該是最小的元素
10 FancyIndexing
要索引向量中的一個值是比較容易的,可以通過x[n]來取值。
但是,如果想要更復(fù)雜地取數(shù),比如,需要返回第三個、第五個、第八個元素時,應(yīng)該怎么辦?示例代碼如下:
x = np.arange(15)
ind = [3, 5, 8]
print(x)
print(x[ind])
[ 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14]
[3 5 8]
也可以從一維向量中構(gòu)建新的二維矩陣
下面代碼的第三行比較難理解,它的意思是構(gòu)造一個新的二維矩陣,第一行需要取x向量中索引為0的元素,以及索引為2的元素;第二行需要取x向量中索引為1的元素,以及索引為3的元素。
可以對照輸出來理解
x = np.arange(15)
np.random.shuffle(x)
ind = np.array([[0, 2], [1, 3]])
print(x)
print(x[ind])
[14 7 9 11 10 4 0 1 13 5 3 6 8 2 12]
[[14 9]
[ 7 11]]
對于二維矩陣,我們使用fancyIndexing取數(shù)也是比較容易的,示例代碼如下:
x = np.arange(16)
np.random.shuffle(x)
x = x.reshape(4, -1)
print(x)
row = np.array([0, 1, 2])
col = np.array([1, 2, 3])
print(x[row, col]) # 相當于取三個點(0,1),(1,2),(2,3)
print(x[1:3, col]) # 相當于取兩行的對應(yīng)列,第二行及第三行的1,2,3列
[[ 3 4 8 13]
[15 5 11 12]
[ 7 2 1 0]
[ 9 10 14 6]]
[ 4 11 0]
[[ 5 11 12]
[ 2 1 0]]
11 Numpy數(shù)組比較
Numpy有一個強大的功能是數(shù)組或矩陣的比較,數(shù)據(jù)比較之后會產(chǎn)生boolean值,示例代碼如下,根據(jù)結(jié)果可以看出來對于矩陣中的每一個值,我們都將其與25進行了比較,并得出一個boolean值
matrix = np.array([
[5, 10, 15],
[20, 25, 30],
[35, 40, 45]
])
m = (matrix == 25)
print(m)
[[False False False]
[False True False]
[False False False]]
下面來看一個比較復(fù)雜的例子:
下面代碼中,print(second_column_25)
的輸出是[False True False]
,首先matrix[:,1]
代表的是所有的行中索引為1的列,即[10,25,40]
,將其與25比較,得到的就是前面的輸出。print(matrix[second_column_25, :])
代表的是返回true值的那一行數(shù)據(jù),即[20,25,30]
文章來源:http://www.zghlxwxcb.cn/news/detail-419641.html
matrix = np.array([
[5, 10, 15],
[20, 25, 30],
[35, 40, 45]
])
second_column_25 = (matrix[:, 1] == 25)
print(second_column_25)
print(matrix[second_column_25, :])
[False True False]
[[20 25 30]]
如果需要多個條件的話,則可以使用條件符來拼接多個條件,其中&
表示的是‘且’,|
表示的是‘或’文章來源地址http://www.zghlxwxcb.cn/news/detail-419641.html
到了這里,關(guān)于Numpy常用函數(shù)匯總的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!