一、numpy是什么?
擴展庫numpy是Python支持科學計算的重要擴展庫,是數據分析和科學計算領域如scipy、pandas、sklearn 等眾多擴展庫中的必備擴展庫之一,提供了強大的N維數組及其相關運算、復雜的廣播函數、C/C++和Fortran代碼集成工具以及線性代數、傅里葉變換和隨機數生成等功能。本章童點介紹數組與矩陣及其相關運算,為學習和理解后面章節中的數據分析、機器學習打下良好的基礎。
簡單來說就是你用來為人工智能領域打基礎的東西,私話說得好,基礎不牢,地動山搖嘛~
所以這個地方可要好好學習哦~~
二、numpy數組
在numpy中使用的不是python自帶的數據類型list
,而是numpy中的ndarray
那為什么使用ndarray
而不是使用list
呢?
因為ndarray是由c/c++寫出來的,占用內存更小,使用速度更快
創建一個ndarray的方法有很多,這里說下使用array方法轉化的
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
#!/usr/bin/env python # -*- coding: utf-8 -*- # @Author: Smly # @datetime: 2021/9/26 22:22 # @Version: 1.0 import numpy as np li = [ 1 , 2 , 3 ] tp = ( 1 , 2 , 3 ) nday1 = np.array(li) nday2 = np.array(tp) print ( "*****類型*****" ) print ( type (nday1)) print ( type (nday2)) print ( "*****數組*****" ) print (nday1) print (nday2) |
輸出結果:
1
2
3
4
5
6
|
*****類型***** <class 'numpy.ndarray'> <class 'numpy.ndarray'> *****數組***** [1 2 3] [1 2 3] |
2.1 數組使用
如果元素相同的話,可以進行加減乘除
在元素個數相同的情況下,可以進行數組間的加減
在元素個數相同的情況下,可以進行數組間的乘除
對某個數進行的乘除,可以自動進行到所有元素
看例子理解:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
|
#!/usr/bin/env python # -*- coding: utf-8 -*- # @Author: Smly # @datetime: 2021/9/26 22:22 # @Version: 1.0 import numpy as np li = [ 1 , 2 , 3 ] # 列表 tp = ( 1 , 2 , 3 ) # 元組 nday1 = np.array(li) # 內置方法將列表轉為ndarray nday2 = np.array(tp) # 內置方法將元組轉為ndarray nday3 = np.array( range ( 5 )) # 使用range內置函數方法生成ndarray連續數組 nday4 = np.array( range ( 5 , 10 )) # 使用range內置函數方法生成ndarray連續數組 print ( "*****類型*****" ) print ( type (nday1)) print ( type (nday2)) print ( type (nday3)) print ( type (nday4)) print ( "*****數組*****" ) print (nday1) print (nday2) print (nday3) print (nday4) print ( "*****數組加減*****" ) print (nday2 + nday1) print (nday2 - nday1) print (nday4 - nday3) print (nday3 + nday4) # 在元素個數相同的情況下,可以進行數組間的加減 print ( "*****數組乘除*****" ) print (nday2 * nday1) print (nday2 / / nday1) print (nday4 * nday3) print (nday4 / / nday3) # 在元素個數相同的情況下,可以進行數組間的乘除 print (nday1 * 3 ) print (nday2 / / 2 ) print (nday3 * 2 ) print (nday4 / / 2 ) # 對某個數進行的乘除,可以自動進行到所有元素 |
運行結果:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
*****類型***** <class 'numpy.ndarray'> <class 'numpy.ndarray'> <class 'numpy.ndarray'> <class 'numpy.ndarray'> *****數組***** [1 2 3] [1 2 3] [0 1 2 3 4] [5 6 7 8 9] *****數組加減***** [2 4 6] [0 0 0] [5 5 5 5 5] [ 5 7 9 11 13] *****數組乘除***** [1 4 9] [1 1 1] [ 0 6 14 24 36] [0 0 0 0 0] [3 6 9] [0 1 1] [0 2 4 6 8] [2 3 3 4 4] |
2.2 創建數組
剛剛的array()
方法是將列表和元組等迭代對象轉為ndarray數組
接下來要說的是自動創建數組
1. 使用empty創建空數組
里面會有初始值,但是數組初始為None
1
2
3
4
5
6
7
8
9
10
11
|
#!/usr/bin/env python # -*- coding: utf-8 -*- # @Author: Smly # @datetime: 2021/9/28 12:29 # @Version: 1.0 import numpy as np em1 = np.empty( 5 ) # 創建一個長度為5的空數組 em2 = np.empty(( 2 , 2 )) # 創建一個2*2的空二維數組 print ( "一維數組,長度為5" , em1) print ( "二維數組,長度為2*2" , em2) |
輸出結果:
1
2
3
4
|
[9.96754604e-312 9.96754614e-312 2.60799828e-310 9.34609789e-307 0.00000000e+000] [[6.95299778e-310 9.96747617e-312] [0.00000000e+000 6.95299776e-310]] |
2. 使用arange函數創建
arange是numpy自帶的的一個方法,作用與range這個Python內置函數相差無幾,都是生成數組
先導入numpy包
1
|
import numpy as np |
然后創建數組
1
2
3
4
5
6
7
8
9
10
11
12
|
print ( "*****ararge創建數組*****" ) aran_arr1 = np.arange( 5 ) aran_arr2 = np.arange( 5 , 10 ) print ( "*****類型*****" ) print ( type (aran_arr1)) print ( type (aran_arr2)) print ( "*****數組*****" ) print (aran_arr1) print (aran_arr2) |
3. 使用zeros函數生成數組
zeros函數是numpy自帶的方法,作用是生成指定數量的全0一維數組,全0二維數組等
看下面的例子:
生成一個具有三個元素的一維數組和一個具有五個元素的一維數組:
1
2
3
4
5
6
7
8
9
10
11
|
#!/usr/bin/env python # -*- coding: utf-8 -*- # @Author: Smly # @datetime: 2021/9/27 21:31 # @Version: 1.0 import numpy as np zero_arr = np.zeros( 3 ) zrro_arr2 = np.zeros( 5 ) print (zero_arr) print (zrro_arr2) |
運行結果:
[0. 0. 0.]
[0. 0. 0. 0. 0.]
當然這只是一位數組,你還可以生成二維數組,也就是矩陣
使用如下代碼可以生成一個三行三列的矩陣
1
|
zero_arr3 = np.zeros(( 3 , 3 )) |
輸出看看:
1
|
print (zero - arr3) |
運行結果:
[[0. 0. 0.]
[0. 0. 0.]
[0. 0. 0.]]
4. ones函數生成數組
使用ones函數生成全1函數,方法同zeros
1
2
3
|
import numpy as np ones_arr1 = np.ones( 3 ) |
輸出結果:
[1. 1. 1.]
生成一個三行三列的矩陣
1
2
3
|
import numpy as np ones_arr2 = np.ones(( 3 , 3 )) |
輸出結果:
[[1. 1. 1.]
[1. 1. 1.]
[1. 1. 1.]]
5. diag函數生成對角矩陣
什么是對角矩陣?你應該聽說過對角線,矩陣就是生成在對角線上的矩陣
函數參數是一個元祖
看代碼和運行結果能夠理解的更深刻
1
2
3
|
import numpy as np diag_arr = np.diag(( 4 , 3 , 2 , 1 )) |
將diag_arr的輸出的結果為:
[[4 0 0 0]
[0 3 0 0]
[0 0 2 0]
[0 0 0 1]]
看,對角線是不是你函數的參數,這下理解了吧
6. N維數組
N維數組就是多維數組,可以理解為數組里面還是數組,里面還是數組,可以參照這個形式
[[[1 2]
[3 4]]
[[5 6]
[7 8]]]
這個概念確實有點抽象,有點難理解。這就是一個三維數組,是通過三維列表使用array方法轉換成ndarray的
代碼:
1
2
3
4
5
6
7
8
9
10
11
12
13
|
#!/usr/bin/env python # -*- coding: utf-8 -*- # @Author: Smly # @datetime: 2021/9/27 13:29 # @Version: 1.0 import numpy as np li = [ [[ 1 , 2 ], [ 3 , 4 ]], [[ 5 , 6 ], [ 7 , 8 ]] ] te1 = np.array(li) print (te1) |
當然,二維數組也算是N維數組
2.3 訪問數組元素
numpy自帶了一個insert
函數,可以往數組中插入元素
看實例:
1
2
3
|
li = [[ 1 , 2 , 3 , 4 ], [ 5 , 6 , 7 , 8 ], [ 2 , 4 , 6 , 8 ]] gb1 = np.array(li) np.insert(gb1, 1 , [ 1 , 2 , 3 , 4 ]) |
輸出結果:
[1 1 2 3 4 2 3 4 5 6 7 8 2 4 6 8]
還有一個自帶的add函數,可以進行數組的相加減
數組嘛,可以使用下標來獲取數組元素
1
2
3
4
5
|
import numpy as np li1 = [ 1 , 2 , 3 , 4 ] gb2 = np.array(li1) print (gb2[ 1 ]) |
輸出結果為:
2
當然,它是一個數組,你理所應當的也可以使用循環語句來遍歷數組
三、了解矩陣
數組是數組,矩陣是矩陣。
數組是一種數據結構,可以存儲多種數據,可以有多維
矩陣是數學中的一個概念,只能存放數字,并且只能是二維的形式
生成矩陣的方法就和生成N維數組的方法是一樣的
先使用列表創建二維列表,然后再使用numpy的方法轉成矩陣,當然也有好幾中生成矩陣的方法
1
2
3
4
5
6
|
import numpy as np li = [[ 1 , 2 , 3 , 4 ], [ 5 , 6 , 7 , 8 ]] j1 = np.matrix(li) print (j1) print ( type (j1)) print (j1.dtype) |
輸出該矩陣:
1
2
3
4
|
輸出矩陣: [[1 2 3 4] [5 6 7 8]] 矩陣在Python的類型: <class 'numpy.matrix'> 在numpy中的類型: int32 |
矩陣可以進行各種數學運算,在numpy中都得到了很好的支持,這里就不細說了
3.1 廣播
何為廣播,廣播就是能將你的東西發送到各個區域,一般在計算機中是將信息發送到局域網絡中的每個計算機中。
而在numpy中也有廣播,只不過他是將元素自動補到數組,矩陣上,就像你在上面看到的,一個數組乘除一個元素,數組中的所有元素都會乘這個數
1
2
3
4
|
import numpy as np li1 = [ 1 , 2 , 3 , 4 ] print (np.array(li1) * 10 ) |
輸出結果:
[10 20 30 40]
這個就是廣播,就是將數字10播到li轉成的數組中,能夠讓數組所有元素都乘10。
而不同維度的數組也可以這樣
1
2
3
4
5
6
7
8
9
10
11
|
#!/usr/bin/env python # -*- coding: utf-8 -*- # @Author: Smly # @datetime: 2021/9/27 13:40 # @Version: 1.0 import numpy as np li = [[ 1 , 2 , 3 , 4 ], [ 5 , 6 , 7 , 8 ], [ 2 , 4 , 6 , 8 ]] gb1 = np.array(li) li1 = [ 1 , 2 , 3 , 4 ] gb2 = np.array(li1) print (gb1 * gb2) |
將一維數組的每個元素挨個廣播到二維數組,前提是:
二維數組中的一維數組的個數與一維數組的個數是相同的
運行結果:
[[ 1 4 9 16]
[ 5 12 21 32]
[ 2 8 18 32]]
以上就是python擴展庫numpy入門教程的詳細內容,更多關于numpy庫入門的資料請關注服務器之家其它相關文章!
原文鏈接:https://blog.csdn.net/m0_52883898/article/details/120928439