【Numpy】学习笔记1
文章目錄
- 一、概述
- 二、基礎(chǔ)
- 1、創(chuàng)建數(shù)組
- (1)通過 list 創(chuàng)建數(shù)組
- (2)特殊數(shù)組
- 2、數(shù)組運(yùn)算
- (1)基礎(chǔ)運(yùn)算(一維)
- (2)基礎(chǔ)運(yùn)算(二維)
- 3、數(shù)學(xué)函數(shù)
- 4、數(shù)組切片和索引
- 5、數(shù)組形狀操作
- (1)形變
- (2)數(shù)組的拼合
- 6、數(shù)組排序
- 7、數(shù)組統(tǒng)計(jì)
- 三、進(jìn)階(以題的形式)
一、概述
numpy 支持大量高維度數(shù)組與矩陣運(yùn)算,此外也針對數(shù)組運(yùn)算提供大量的數(shù)學(xué)函數(shù)庫。機(jī)器學(xué)習(xí)涉及到大量對數(shù)組的變換和運(yùn)算。
二、基礎(chǔ)
import numpy as np print(np.__version__)輸出結(jié)果
1.14.31、創(chuàng)建數(shù)組
NumPy 的主要對象是多維數(shù)組 Ndarray。在 NumPy 中維度(dimensions)叫做軸(axes),軸的個(gè)數(shù)叫做秩(rank)。
下面的數(shù)組的秩為 2。第一個(gè)維度(軸)長度為 2,第二個(gè)維度(軸)長度為 3。
[[1., 2., 3.],[4., 5., 6.]](1)通過 list 創(chuàng)建數(shù)組
## 一維數(shù)組 print(np.array([1, 2, 3])) ## 二維數(shù)組 print(np.array([[1, 2, 3], [4, 5, 6]])輸出結(jié)果
array([1, 2, 3]) array([[1, 2, 3],[4, 5, 6]])(2)特殊數(shù)組
zeros()、ones()、arange()、eye()、linespace()、random.rand()、random.randint()、fromfunction()
## 全為 0 的二維數(shù)組 np.zeros((3, 5)) # array([[0., 0., 0., 0., 0.], # [0., 0., 0., 0., 0.], # [0., 0., 0., 0., 0.]])## 全為 1 的三維數(shù)組 np.ones((2, 3, 4)) # array([[[1., 1., 1., 1.], # [1., 1., 1., 1.], # [1., 1., 1., 1.]],# [[1., 1., 1., 1.], # [1., 1., 1., 1.], # [1., 1., 1., 1.]]])## 一維等差數(shù)組 np.arange(5) # array([0, 1, 2, 3, 4])## 二維等差數(shù)組 np.arange(6).reshape(2, 3) # array([[0, 1, 2], # [3, 4, 5]])## 單位矩陣(二維數(shù)組) np.eye(3) # array([[1., 0., 0.], # [0., 1., 0.], # [0., 0., 1.]])## 等間隔一維數(shù)組:[1, 10]區(qū)間上等間隔的六個(gè)數(shù) np.linspace(1, 10, num=6) # array([ 1. , 2.8, 4.6, 6.4, 8.2, 10. ])## 二維隨機(jī)數(shù)組 np.random.rand(2, 3) # array([[0.52506848, 0.53357141, 0.53381268], # [0.16647792, 0.22610891, 0.62271866]])## 二維隨機(jī)整數(shù)數(shù)組(數(shù)值小于 5) np.random.randint(5, size=(2, 3)) # array([[2, 0, 4], # [0, 3, 0]])## 自定義函數(shù)創(chuàng)建數(shù)組:創(chuàng)建大小為(3,5)的數(shù)據(jù) np.fromfunction(lambda i, j : i + j, (3, 5)) # array([[0., 1., 2., 3., 4.], # [1., 2., 3., 4., 5.], # [2., 3., 4., 5., 6.]])2、數(shù)組運(yùn)算
(1)基礎(chǔ)運(yùn)算(一維)
相對應(yīng)元素之間進(jìn)行運(yùn)算。
## 創(chuàng)建兩個(gè)一維數(shù)組,a、b a = np.array([10, 20, 30, 40, 50]) b = np.arange(1, 6) a, b # (array([10, 20, 30, 40, 50]), array([1, 2, 3, 4, 5]))print(a + b) print(a - b) print(a * b) print(a / b) # array([11, 22, 33, 44, 55]) # array([ 9, 18, 27, 36, 45]) # array([ 10, 40, 90, 160, 250]) # array([10., 10., 10., 10., 10.])(2)基礎(chǔ)運(yùn)算(二維)
- 重點(diǎn):矩陣乘法、轉(zhuǎn)置、逆矩陣
3、數(shù)學(xué)函數(shù)
print(a) # [10 20 30 40 50]np.sin(a) # 三角函數(shù) np.exp(a) # 指數(shù) np.sqrt(a) # 開方運(yùn)算 np.power(a, 3) # 立方運(yùn)算 # array([-0.54402111, 0.91294525, -0.98803162, 0.74511316, -0.26237485]) # array([2.20264658e+04, 4.85165195e+08, 1.06864746e+13, 2.35385267e+17, 5.18470553e+21]) # array([3.16227766, 4.47213595, 5.47722558, 6.32455532, 7.07106781]) # array([ 1000, 8000, 27000, 64000, 125000])4、數(shù)組切片和索引
## 一維切片 a = np.array([1, 2, 3, 4, 5]) a[0], a[-1] # (1, 5)print(a[0:2], a[:-1]) # (array([1, 2]), array([1, 2, 3, 4]))## 二維切片 a = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]]) ## 第一行、最后一行 print(a[0], a[-1]) ## 第二列 print(a[:, 1]) ## 第 2,3 行 print(a[1:3, :])5、數(shù)組形狀操作
(1)形變
- reshape()方法:改變數(shù)組形狀(但不改變原始數(shù)組)
- ravel()方法:將多維數(shù)組拉成一維數(shù)組。
(2)數(shù)組的拼合
a = np.random.randint(10, size=(3, 4)) b = np.random.randint(10, size=(3, 4)) a, b # (array([[1, 1, 4, 0], # [2, 2, 4, 3], # [1, 8, 4, 3]]), array([[2, 9, 1, 1], # [7, 9, 0, 2], # [6, 5, 0, 9]]))## 垂直拼合數(shù)組 print(np.vstack((a, b))) ## 水平拼合數(shù)組 print(np.hstack((a, b))) # array([[1, 1, 4, 0], # [2, 2, 4, 3], # [1, 8, 4, 3], # [2, 9, 1, 1], # [7, 9, 0, 2], # [6, 5, 0, 9]]) # array([[1, 1, 4, 0, 2, 9, 1, 1], # [2, 2, 4, 3, 7, 9, 0, 2], # [1, 8, 4, 3, 6, 5, 0, 9]])## 沿橫軸分割數(shù)組 print(np.hsplit(a, 4)) ## 沿縱軸分割數(shù)組 print(np.vsplit(a, 3)) # [array([[1], # [2], # [1]]), array([[1], # [2], # [8]]), array([[4], # [4], # [4]]), array([[0], # [3], # [3]])] # [array([[1, 1, 4, 0]]), array([[2, 2, 4, 3]]), array([[1, 8, 4, 3]])]6、數(shù)組排序
axis = 0 代表列;
axis = 1 代表行。
7、數(shù)組統(tǒng)計(jì)
## 統(tǒng)計(jì)數(shù)組各列的中位數(shù) print(np.median(a, axis = 0)) ## 各行的算術(shù)平均值 print(np.mean(a, axis = 1)) ## 各列的加權(quán)平均值 print(np.average(a, axis = 0)) ## 各行的方差 print(np.var(a, axis = 1)) ## 各列的標(biāo)準(zhǔn)偏差 print(np,std(a, axis = 0))# array([4., 4., 3.]) # array([2.66666667, 5.66666667, 4.33333333]) # array([3.66666667, 4.33333333, 4.66666667]) # array([1.55555556, 8.22222222, 4.22222222]) # array([2.05480467, 2.05480467, 3.09120617])三、進(jìn)階(以題的形式)
1、創(chuàng)建一個(gè) 5x5 的二維數(shù)組,其中邊界值為1,其余值為0
Z = np.ones((5, 5)) Z[1:-1, 1:-1] = 0 print(Z) # array([[1., 1., 1., 1., 1.], # [1., 0., 0., 0., 1.], # [1., 0., 0., 0., 1.], # [1., 0., 0., 0., 1.], # [1., 1., 1., 1., 1.]])2、使用數(shù)字 0 將一個(gè)全為 1 的 5x5 二維數(shù)組包圍
==》np.pad() 方法
3、創(chuàng)建一個(gè) 5x5 的二維數(shù)組,并設(shè)置值 1, 2, 3, 4 落在其對角線下方
==》np.diag(),其中k表示元素的位置,k=0表示對角線,k>0表示對角線上方,k<0表示對角線下方,k的大小表示與對角線的“距離”(決定數(shù)組的大小)
4、創(chuàng)建一個(gè) 10x10 的二維數(shù)組,并使得 1 和 0 沿對角線間隔放置
Z = np.zeros((10, 10), dtype=int) Z[1::2, ::2] = 1 Z[::2, 1::2] = 1 print(Z) # array([[0, 1, 0, 1, 0, 1, 0, 1, 0, 1], # [1, 0, 1, 0, 1, 0, 1, 0, 1, 0], # [0, 1, 0, 1, 0, 1, 0, 1, 0, 1], # [1, 0, 1, 0, 1, 0, 1, 0, 1, 0], # [0, 1, 0, 1, 0, 1, 0, 1, 0, 1], # [1, 0, 1, 0, 1, 0, 1, 0, 1, 0], # [0, 1, 0, 1, 0, 1, 0, 1, 0, 1], # [1, 0, 1, 0, 1, 0, 1, 0, 1, 0], # [0, 1, 0, 1, 0, 1, 0, 1, 0, 1], # [1, 0, 1, 0, 1, 0, 1, 0, 1, 0]])5、創(chuàng)建一個(gè) 0-10 的一維數(shù)組,并將 (1, 9] 之間的數(shù)全部反轉(zhuǎn)成負(fù)數(shù)
Z = np.arange(11) Z[(1 < Z) & (Z <= 9)] *= -1 print(Z) # [ 0 1 -2 -3 -4 -5 -6 -7 -8 -9 10]6、找出兩個(gè)一維數(shù)組中相同的元素
Z1 = np.random.randint(0, 10, 15) Z2 = np.random.randint(0, 10, 10) print("Z1:", Z1) print("Z2:", Z2) np.intersect1d(Z1, Z2) # Z1: [3 8 5 5 1 0 5 2 3 8 3 1 4 0 4] # Z2: [2 8 4 8 3 7 3 1 5 3] # array([1, 2, 3, 4, 5, 8])7、找出兩個(gè)一維數(shù)組中相同的元素
Z = np.zeros((5, 5)) Z += np.arange(1, 6) print(Z) # [[1. 2. 3. 4. 5.] # [1. 2. 3. 4. 5.] # [1. 2. 3. 4. 5.] # [1. 2. 3. 4. 5.] # [1. 2. 3. 4. 5.]]8、時(shí)間計(jì)算
yesterday = np.datetime64('today', 'D') - np.timedelta64(1, 'D') today = np.datetime64('today', 'D') tomorrow = np.datetime64('today', 'D') + np.timedelta64(1, 'D') print('Yesterday: ', yesterday) print('Today: ', today) print('Tomorrow: ', tomorrow) # Yesterday: 2019-01-02 # Today: 2019-01-03 # Tomorrow: 2019-01-049、提取一個(gè)隨機(jī)數(shù)組的整數(shù)部分
Z = np.random.uniform(0, 10, 10) print("原始值: ", Z)print("方法 1:", Z - Z % 1) # 減去小數(shù)部分 print("方法 2:", np.floor(Z)) # 返回輸入值的下限,即輸入?yún)?shù)的最大整數(shù)。 print("方法 3:", np.ceil(Z) - 1) # 返回輸入值的上限 print("方法 4:", Z.astype(int)) # 類型轉(zhuǎn)換 print("方法 5:", np.trunc(Z)) # 截取 # 原始值: [5.56601634 4.77164344 3.08836714 3.30325796 6.15169633 9.79808824 4.38637838 6.39368379 9.62265927 2.32704462] # 方法 1: [5. 4. 3. 3. 6. 9. 4. 6. 9. 2.] # 方法 2: [5. 4. 3. 3. 6. 9. 4. 6. 9. 2.] # 方法 3: [5. 4. 3. 3. 6. 9. 4. 6. 9. 2.] # 方法 4: [5 4 3 3 6 9 4 6 9 2] # 方法 5: [5. 4. 3. 3. 6. 9. 4. 6. 9. 2.]10、創(chuàng)建一個(gè)長度為 5 的等間隔一維數(shù)組,其值域范圍從 0 到 1,但是不包括 0 和 1
- numpy.linspace(start, stop, num=50, endpoint=True, retstep=False, dtype=None)
- 在指定的間隔 [start, stop] 內(nèi)返回均勻間隔的數(shù)字。其中,endpoint為True表示包括stop,False表示不包括;
11、創(chuàng)建一個(gè) 3x3 的二維數(shù)組,并將列按升序排序:
- 按列排序:axis = 0
12、打印每個(gè) NumPy 標(biāo)量類型的最小值和最大值
- np.iinfo(dtype):dtype 類型(需為整型)的信息
- np.finfo(dtype):dtype 類型(需為浮點(diǎn)型)的信息
13、將 float32 轉(zhuǎn)換為整型:astype()
Z= np.arange(10, dtype=np.float32) print(Z)Z = Z.astype(np.int32, copy=False) Z # [0. 1. 2. 3. 4. 5. 6. 7. 8. 9.] # array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9], dtype=int32)14、從隨機(jī)一維數(shù)組中找出距離給定數(shù)值(0.5)最近的數(shù)
- flat 數(shù)組的迭代器
15、非零元素索引位置:np.nonzero()
Z = np.nonzero([1,2,0,3,5,2,0]) Z # (array([0, 1, 3, 4, 5]),)16、對于給定的 5x5 二維數(shù)組,在其內(nèi)部隨機(jī)放置 p 個(gè)值為 1 的數(shù)
- np.random.choice(range(5 * 6), p, replace=False)
- 在range(5 * 6)中選擇p個(gè)數(shù)據(jù)。
- np.put(Z, pos, value):將Z中索引為pos的值設(shè)置為value
17、對于隨機(jī)的 3x3 二維數(shù)組,減去數(shù)組每一行的平均值
X = np.random.rand(3, 3) print(X)Y = X - X.mean(axis=1, keepdims = True) Y # [[0.03511832 0.90273634 0.13177977] # [0.60108545 0.63640746 0.50655992] # [0.80052123 0.94236654 0.33120157]] # array([[-0.32142649, 0.54619153, -0.22476504], # [ 0.0197345 , 0.05505652, -0.07479102], # [ 0.10915812, 0.25100343, -0.36016154]])18、獲得二維數(shù)組點(diǎn)積結(jié)果的對角線數(shù)組
A = np.random.uniform(0, 1, (3, 3)) B = np.random.uniform(0, 1, (3, 3))print(np.dot(A, B)) ## 方法1:較慢 print(np.diag(np.dot(A, B))) ## 方法2:較快 print(np.sum(A * B.T, axis=1)) ## 方法3:快 print(np.einsum("ij, ij->i", A, B)) # [[0.46626606 0.39535655 1.13705572] # [0.41883304 0.58240235 1.26570632] # [0.20773629 0.44994393 0.80665664]] # [0.46626606 0.58240235 0.80665664] # [0.46626606 0.58240235 0.80665664] # [0.78789106 0.58938838 0.38117496]19、找到隨機(jī)一維數(shù)組中前 p 個(gè)最大值
Z = np.random.randint(1, 100, 100) print(Z)p = 5 Z[np.argsort(Z)[-p:]] ## 默認(rèn)升序排列 # [45 2 19 56 92 5 2 21 58 55 83 51 94 50 32 67 41 37 34 86 58 40 40 59 7 68 63 26 31 3 85 83 23 8 16 32 31 94 65 50 74 95 13 35 58 64 3 47 30 74 3 63 1 24 64 85 42 31 52 12 88 58 80 42 27 73 43 93 83 21 85 64 44 35 64 65 66 29 57 53 47 40 47 97 24 87 62 14 46 97 9 85 72 46 11 53 73 43 49 50] # array([94, 94, 95, 97, 97])20、運(yùn)算
- x 的 n 次冪:np.power(x, n)
- x小數(shù)位設(shè)置:np.set_printoptions(precision=2)
21、百分位數(shù)(25%,50%,75%)
a = np.random.randint(10, 19, 10) print(a)np.percentile(a, q = [25, 50, 75]) # [13 13 14 11 11 10 11 13 10 11] # array([11., 11., 13.])22、找出數(shù)組中缺失值的總數(shù)及所在位置
Z = np.random.rand(10, 10) Z[np.random.randint(10, size=5), np.random.randint(10, size=5)] = np.nanprint("缺失值總數(shù):\n", np.isnan(Z).sum()) print("缺失值索引:\n", np.where(np.isnan(Z))) # 缺失值總數(shù): # 5 # 缺失值索引: # (array([1, 4, 4, 7, 9]), array([3, 8, 9, 5, 8]))23、從隨機(jī)數(shù)組中刪除包含缺失值的行
獲取元素,當(dāng)元素的索引為True則保留,False為不保留
24、統(tǒng)計(jì)隨機(jī)數(shù)組中的各元素的數(shù)量
np.unique() 函數(shù):返回值中,第 2 個(gè)數(shù)組對應(yīng)第 1 個(gè)數(shù)組元素的數(shù)量
25、將數(shù)組中各元素按指定分類轉(zhuǎn)換為文本值
指定類別如下:
1 → 汽車
2 → 公交車
3 → 火車
26、將多個(gè) 1 維數(shù)組拼合為單個(gè) Ndarray
np.concatenate()
27、得到二維隨機(jī)數(shù)組各行的最大值
np.amax()
np.apply_along_axis()
28、計(jì)算兩個(gè)數(shù)組之間的歐氏距離
np.linalg.norm()
29、打印復(fù)數(shù)的實(shí)部和虛部
real:實(shí)部,imag:虛部
30、求解給出矩陣的逆矩陣并驗(yàn)證
np.linalg.inv(matrix)
31、使用 Z-Score 標(biāo)準(zhǔn)化算法對數(shù)據(jù)進(jìn)行標(biāo)準(zhǔn)化處理
Z-Score 標(biāo)準(zhǔn)化公式:
Z=X?mean(X)sd(X)Z = \frac{X-\mathrm{mean}(X)}{\mathrm{sd}(X)}Z=sd(X)X?mean(X)?
32、使用 Min-Max 標(biāo)準(zhǔn)化公式對數(shù)據(jù)進(jìn)行標(biāo)準(zhǔn)化處理
Min-Max 標(biāo)準(zhǔn)化公式:
Y=Z?min?(Z)max?(Z)?min?(Z)Y = \frac{Z-\min(Z)}{\max(Z)-\min(Z)}Y=max(Z)?min(Z)Z?min(Z)?
33、使用 L2 范數(shù)對數(shù)據(jù)進(jìn)行標(biāo)準(zhǔn)化處理
L2 范數(shù)計(jì)算公式:
L2=x12+x22+…+xi2L_2 = \sqrt{x_1^2 + x_2^2 + \ldots + x_i^2}L2?=x12?+x22?+…+xi2??
34、計(jì)算變量直接的相關(guān)性系數(shù)
np.corrcoef()
相關(guān)系數(shù)取值范圍:[-1, 1],1、-1表示相關(guān)性強(qiáng),0表示無相關(guān)性。
35、計(jì)算矩陣的特征值和特征向量
np.linalg.eig()
驗(yàn)證:P'AP=M
v * np.diag(w) * np.linalg.inv(v) # matrix([[1., 2., 3.], # [4., 5., 6.], # [7., 8., 9.]])36、計(jì)算 Ndarray 兩相鄰元素差值
np.diff()
37、計(jì)算 Ndarray 相鄰元素依次累加
np.cumsum()
38、使用 NumPy 按列、行連接兩個(gè)數(shù)組
np.c_[]
np.r_[]
39、打印九九乘法表
np.fromfunction()
總結(jié)
以上是生活随笔為你收集整理的【Numpy】学习笔记1的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 金融贷款逾期的模型构建5——数据预处理
- 下一篇: 金融贷款逾期的模型构建6——特征选择