python擴(kuò)展庫(kù)numpy入門(mén)教程
一、numpy是什么?
擴(kuò)展庫(kù)numpy是Python支持科學(xué)計(jì)算的重要擴(kuò)展庫(kù),是數(shù)據(jù)分析和科學(xué)計(jì)算領(lǐng)域如scipy、pandas、sklearn 等眾多擴(kuò)展庫(kù)中的必備擴(kuò)展庫(kù)之一,提供了強(qiáng)大的N維數(shù)組及其相關(guān)運(yùn)算、復(fù)雜的廣播函數(shù)、C/C++和Fortran代碼集成工具以及線性代數(shù)、傅里葉變換和隨機(jī)數(shù)生成等功能。本章童點(diǎn)介紹數(shù)組與矩陣及其相關(guān)運(yùn)算,為學(xué)習(xí)和理解后面章節(jié)中的數(shù)據(jù)分析、機(jī)器學(xué)習(xí)打下良好的基礎(chǔ)。
簡(jiǎn)單來(lái)說(shuō)就是你用來(lái)為人工智能領(lǐng)域打基礎(chǔ)的東西,私話說(shuō)得好,基礎(chǔ)不牢,地動(dòng)山搖嘛~
所以這個(gè)地方可要好好學(xué)習(xí)哦~~
二、numpy數(shù)組
在numpy中使用的不是python自帶的數(shù)據(jù)類型list,而是numpy中的ndarray
那為什么使用ndarray而不是使用list呢?
因?yàn)閚darray是由c/c++寫(xiě)出來(lái)的,占用內(nèi)存更小,使用速度更快
創(chuàng)建一個(gè)ndarray的方法有很多,這里說(shuō)下使用array方法轉(zhuǎn)化的
#!/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("*****數(shù)組*****")
print(nday1)
print(nday2)
輸出結(jié)果:
*****類型***** <class 'numpy.ndarray'> <class 'numpy.ndarray'> *****數(shù)組***** [1 2 3] [1 2 3]
2.1 數(shù)組使用
如果元素相同的話,可以進(jìn)行加減乘除
在元素個(gè)數(shù)相同的情況下,可以進(jìn)行數(shù)組間的加減
在元素個(gè)數(shù)相同的情況下,可以進(jìn)行數(shù)組間的乘除
對(duì)某個(gè)數(shù)進(jìn)行的乘除,可以自動(dòng)進(jìn)行到所有元素
看例子理解:
#!/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) # 內(nèi)置方法將列表轉(zhuǎn)為ndarray
nday2 = np.array(tp) # 內(nèi)置方法將元組轉(zhuǎn)為ndarray
nday3 = np.array(range(5)) # 使用range內(nèi)置函數(shù)方法生成ndarray連續(xù)數(shù)組
nday4 = np.array(range(5, 10)) # 使用range內(nèi)置函數(shù)方法生成ndarray連續(xù)數(shù)組
print("*****類型*****")
print(type(nday1))
print(type(nday2))
print(type(nday3))
print(type(nday4))
print("*****數(shù)組*****")
print(nday1)
print(nday2)
print(nday3)
print(nday4)
print("*****數(shù)組加減*****")
print(nday2 + nday1)
print(nday2 - nday1)
print(nday4 - nday3)
print(nday3 + nday4)
# 在元素個(gè)數(shù)相同的情況下,可以進(jìn)行數(shù)組間的加減
print("*****數(shù)組乘除*****")
print(nday2 * nday1)
print(nday2 // nday1)
print(nday4 * nday3)
print(nday4 // nday3)
# 在元素個(gè)數(shù)相同的情況下,可以進(jìn)行數(shù)組間的乘除
print(nday1 * 3)
print(nday2 // 2)
print(nday3 * 2)
print(nday4 // 2)
# 對(duì)某個(gè)數(shù)進(jìn)行的乘除,可以自動(dòng)進(jìn)行到所有元素
運(yùn)行結(jié)果:
*****類型***** <class 'numpy.ndarray'> <class 'numpy.ndarray'> <class 'numpy.ndarray'> <class 'numpy.ndarray'> *****數(shù)組***** [1 2 3] [1 2 3] [0 1 2 3 4] [5 6 7 8 9] *****數(shù)組加減***** [2 4 6] [0 0 0] [5 5 5 5 5] [ 5 7 9 11 13] *****數(shù)組乘除***** [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 創(chuàng)建數(shù)組
剛剛的array()方法是將列表和元組等迭代對(duì)象轉(zhuǎn)為ndarray數(shù)組
接下來(lái)要說(shuō)的是自動(dòng)創(chuàng)建數(shù)組
1. 使用empty創(chuàng)建空數(shù)組
里面會(huì)有初始值,但是數(shù)組初始為None
#!/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) # 創(chuàng)建一個(gè)長(zhǎng)度為5的空數(shù)組
em2 = np.empty((2, 2)) # 創(chuàng)建一個(gè)2*2的空二維數(shù)組
print("一維數(shù)組,長(zhǎng)度為5", em1)
print("二維數(shù)組,長(zhǎng)度為2*2", em2)
輸出結(jié)果:
[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函數(shù)創(chuàng)建
arange是numpy自帶的的一個(gè)方法,作用與range這個(gè)Python內(nèi)置函數(shù)相差無(wú)幾,都是生成數(shù)組
先導(dǎo)入numpy包
import numpy as np
然后創(chuàng)建數(shù)組
print("*****ararge創(chuàng)建數(shù)組*****")
aran_arr1 = np.arange(5)
aran_arr2 = np.arange(5, 10)
print("*****類型*****")
print(type(aran_arr1))
print(type(aran_arr2))
print("*****數(shù)組*****")
print(aran_arr1)
print(aran_arr2)
3. 使用zeros函數(shù)生成數(shù)組
zeros函數(shù)是numpy自帶的方法,作用是生成指定數(shù)量的全0一維數(shù)組,全0二維數(shù)組等
看下面的例子:
生成一個(gè)具有三個(gè)元素的一維數(shù)組和一個(gè)具有五個(gè)元素的一維數(shù)組:
#!/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)
運(yùn)行結(jié)果:
[0. 0. 0.]
[0. 0. 0. 0. 0.]
當(dāng)然這只是一位數(shù)組,你還可以生成二維數(shù)組,也就是矩陣
使用如下代碼可以生成一個(gè)三行三列的矩陣
zero_arr3 = np.zeros((3, 3))
輸出看看:
print(zero-arr3)
運(yùn)行結(jié)果:
[[0. 0. 0.]
[0. 0. 0.]
[0. 0. 0.]]
4. ones函數(shù)生成數(shù)組
使用ones函數(shù)生成全1函數(shù),方法同zeros
import numpy as np ones_arr1 = np.ones(3)
輸出結(jié)果:
[1. 1. 1.]
生成一個(gè)三行三列的矩陣
import numpy as np ones_arr2 = np.ones((3, 3))
輸出結(jié)果:
[[1. 1. 1.]
[1. 1. 1.]
[1. 1. 1.]]
5. diag函數(shù)生成對(duì)角矩陣
什么是對(duì)角矩陣?你應(yīng)該聽(tīng)說(shuō)過(guò)對(duì)角線,矩陣就是生成在對(duì)角線上的矩陣
函數(shù)參數(shù)是一個(gè)元祖
看代碼和運(yùn)行結(jié)果能夠理解的更深刻
import numpy as np diag_arr = np.diag((4, 3, 2, 1))
將diag_arr的輸出的結(jié)果為:
[[4 0 0 0]
[0 3 0 0]
[0 0 2 0]
[0 0 0 1]]
看,對(duì)角線是不是你函數(shù)的參數(shù),這下理解了吧
6. N維數(shù)組
N維數(shù)組就是多維數(shù)組,可以理解為數(shù)組里面還是數(shù)組,里面還是數(shù)組,可以參照這個(gè)形式
[[[1 2]
[3 4]]
[[5 6]
[7 8]]]
這個(gè)概念確實(shí)有點(diǎn)抽象,有點(diǎn)難理解。這就是一個(gè)三維數(shù)組,是通過(guò)三維列表使用array方法轉(zhuǎn)換成ndarray的
代碼:
#!/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)
當(dāng)然,二維數(shù)組也算是N維數(shù)組
2.3 訪問(wèn)數(shù)組元素
numpy自帶了一個(gè)insert函數(shù),可以往數(shù)組中插入元素
看實(shí)例:
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])
輸出結(jié)果:
[1 1 2 3 4 2 3 4 5 6 7 8 2 4 6 8]
還有一個(gè)自帶的add函數(shù),可以進(jìn)行數(shù)組的相加減
數(shù)組嘛,可以使用下標(biāo)來(lái)獲取數(shù)組元素
import numpy as np li1 = [1, 2, 3, 4] gb2 = np.array(li1) print(gb2[1])
輸出結(jié)果為:
2
當(dāng)然,它是一個(gè)數(shù)組,你理所應(yīng)當(dāng)?shù)囊部梢允褂醚h(huán)語(yǔ)句來(lái)遍歷數(shù)組
三、了解矩陣
數(shù)組是數(shù)組,矩陣是矩陣。
數(shù)組是一種數(shù)據(jù)結(jié)構(gòu),可以存儲(chǔ)多種數(shù)據(jù),可以有多維
矩陣是數(shù)學(xué)中的一個(gè)概念,只能存放數(shù)字,并且只能是二維的形式
生成矩陣的方法就和生成N維數(shù)組的方法是一樣的
先使用列表創(chuàng)建二維列表,然后再使用numpy的方法轉(zhuǎn)成矩陣,當(dāng)然也有好幾中生成矩陣的方法
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] [5 6 7 8]] 矩陣在Python的類型: <class 'numpy.matrix'> 在numpy中的類型: int32
矩陣可以進(jìn)行各種數(shù)學(xué)運(yùn)算,在numpy中都得到了很好的支持,這里就不細(xì)說(shuō)了
3.1 廣播
何為廣播,廣播就是能將你的東西發(fā)送到各個(gè)區(qū)域,一般在計(jì)算機(jī)中是將信息發(fā)送到局域網(wǎng)絡(luò)中的每個(gè)計(jì)算機(jī)中。
而在numpy中也有廣播,只不過(guò)他是將元素自動(dòng)補(bǔ)到數(shù)組,矩陣上,就像你在上面看到的,一個(gè)數(shù)組乘除一個(gè)元素,數(shù)組中的所有元素都會(huì)乘這個(gè)數(shù)
import numpy as np li1 = [1, 2, 3, 4] print(np.array(li1)*10)
輸出結(jié)果:
[10 20 30 40]
這個(gè)就是廣播,就是將數(shù)字10播到li轉(zhuǎn)成的數(shù)組中,能夠讓數(shù)組所有元素都乘10。
而不同維度的數(shù)組也可以這樣
#!/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)
將一維數(shù)組的每個(gè)元素挨個(gè)廣播到二維數(shù)組,前提是:
二維數(shù)組中的一維數(shù)組的個(gè)數(shù)與一維數(shù)組的個(gè)數(shù)是相同的
運(yùn)行結(jié)果:
[[ 1 4 9 16]
[ 5 12 21 32]
[ 2 8 18 32]]
以上就是python擴(kuò)展庫(kù)numpy入門(mén)教程的詳細(xì)內(nèi)容,更多關(guān)于numpy庫(kù)入門(mén)的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
python實(shí)現(xiàn)批量修改服務(wù)器密碼的方法
這篇文章主要介紹了python實(shí)現(xiàn)批量修改服務(wù)器密碼的方法,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值 ,需要的朋友可以參考下2019-08-08
Python實(shí)現(xiàn)OCR識(shí)別之pytesseract案例詳解
這篇文章主要介紹了Python實(shí)現(xiàn)OCR識(shí)別之pytesseract案例詳解,本篇文章通過(guò)簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下2021-07-07
Python函數(shù)常見(jiàn)幾種return返回值類型
本文主要介紹了Python函數(shù)常見(jiàn)幾種return返回值類型,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-01-01
Python WEB應(yīng)用部署的實(shí)現(xiàn)方法
這篇文章主要介紹了Python WEB應(yīng)用部署的實(shí)現(xiàn)方法,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2019-01-01
Python實(shí)現(xiàn)網(wǎng)站注冊(cè)驗(yàn)證碼生成類
這篇文章主要為大家詳細(xì)介紹了Python實(shí)現(xiàn)網(wǎng)站注冊(cè)驗(yàn)證碼生成類,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-06-06
python 利用PyAutoGUI快速構(gòu)建自動(dòng)化操作腳本
我們經(jīng)常遇到需要進(jìn)行大量重復(fù)操作的時(shí)候,比如:網(wǎng)頁(yè)上填表,對(duì) web 版本 OA 進(jìn)行操作,自動(dòng)化測(cè)試或者給新系統(tǒng)首次添加數(shù)據(jù)等,今天就利用PyAutoGUI構(gòu)建自動(dòng)化操作腳本完成這些重復(fù)的需求2021-05-05
Python抓取通過(guò)Ajax加載數(shù)據(jù)的示例
在網(wǎng)頁(yè)上,有一些內(nèi)容是通過(guò)執(zhí)行Ajax請(qǐng)求動(dòng)態(tài)加載數(shù)據(jù)渲染出來(lái)的,本文主要介紹了使用Python抓取通過(guò)Ajax加載數(shù)據(jù),感興趣的可以了解一下2023-05-05

