欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python之Numpy的超實(shí)用基礎(chǔ)詳細(xì)教程

 更新時(shí)間:2019年10月23日 09:44:34   作者:Yngz_Miao  
這篇文章主要介紹了Python之Numpy的超實(shí)用基礎(chǔ)詳細(xì)教程,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧

Numpy在python中屬于非常常用的包,無(wú)論是機(jī)器學(xué)習(xí)搭配pandas,還是數(shù)據(jù)可視化搭配pylab都是很正常的搭配。

Numpy

numpy的官方中文文檔:NumPy 中文

NumPy是使用Python進(jìn)行科學(xué)計(jì)算的基礎(chǔ)軟件包。除其他外,它包括:

  • 功能強(qiáng)大的N維數(shù)組對(duì)象;
  • 精密廣播功能函數(shù);
  • 集成C/C+和Fortran代碼的工具;
  • 強(qiáng)大的線性代數(shù)、傅立葉變換和隨機(jī)數(shù)功能。

更簡(jiǎn)單的說(shuō),Numpy是Python的Matlab數(shù)學(xué)計(jì)算包。使用它,python可以更簡(jiǎn)單便捷地對(duì)矩陣向量進(jìn)行計(jì)算。

一般來(lái)說(shuō),我們引用該包并將其簡(jiǎn)稱(chēng)為np:

import numpy as np

Numpy的ndarry對(duì)象

ndarray的創(chuàng)建

Numpy中最重要的數(shù)據(jù)類(lèi)型就是:N維數(shù)組對(duì)象ndarray。它是一系列同類(lèi)型數(shù)據(jù)的集合,以0下標(biāo)為開(kāi)始進(jìn)行集合中元素的索引。

它具有以下兩個(gè)特點(diǎn):

  • ndarray對(duì)象是用于存放同類(lèi)型元素的多維數(shù)組;
  • ndarray中的每個(gè)元素在內(nèi)存中都有相同存儲(chǔ)大小的區(qū)域。

創(chuàng)建一個(gè)ndarray對(duì)象:

np.array(object, dtype = None, copy = True, order = None, subok = False, ndmin = 0)

參數(shù)說(shuō)明:

名稱(chēng) 描述
object 數(shù)組或嵌套的數(shù)列
dtype 數(shù)組元素的數(shù)據(jù)類(lèi)型,可選
copy 對(duì)象是否需要復(fù)制,可選
order 創(chuàng)建數(shù)組的樣式,C為行方向,F(xiàn)為列方向,A為任意方向(默認(rèn))
subok 默認(rèn)返回一個(gè)與基類(lèi)類(lèi)型一致的數(shù)組
ndmin 指定生成數(shù)組的最小維度

一般而言,并不需要記住這么多可選參數(shù):

import numpy as np

if __name__ == "__main__":
 x = np.array([1, 2, 3])
 print(x)

運(yùn)行該腳本:

yngzmiao@yngzmiao-virtual-machine:~/test$ python numpy_test.py
[1 2 3]

當(dāng)然,除了之前的array方法創(chuàng)建ndarray對(duì)象之外,還提供了另外的幾種創(chuàng)建方式:

np.empty(shape, dtype = float, order = 'C')     # 指定形狀的未初始化數(shù)組

np.zeros(shape, dtype = float, order = 'C')     # 指定形狀的全0數(shù)組
np.ones(shape, dtype = None, order = 'C')      # 指定形狀的全1數(shù)組

np.arange(start = 0, stop, step = 1, dtype)     # 從起始值到終止值(不包含)時(shí),按步長(zhǎng)從范圍內(nèi)創(chuàng)建數(shù)組

np.linspace(start, stop, num = 50, endpoint = True, retstep = False, dtype = None)  # 從起始值到終止值(默認(rèn)包含)創(chuàng)建一個(gè)等差數(shù)組的一維數(shù)組
np.logspace(start, stop, num = 50, endpoint = True, base = 10.0, dtype = None) # 從起始值到終止值(默認(rèn)包含)創(chuàng)建一個(gè)等比數(shù)組的一維數(shù)組

Numpy也提供了從python其他類(lèi)型直接轉(zhuǎn)換成ndarray的方式:

np.asarray(a, dtype = None, order = None)      # 列表形式
np.frombuffer(buffer, dtype = float, count = -1, offset = 0)      # 以流的形式讀入
np.fromiter(iterable, dtype, count=-1)     # 從可迭代對(duì)象中,以迭代器的形式讀入

例如:

import numpy as np

if __name__ == "__main__":
 a = [[1, 2 ,3], [4, 5]]
 b = 'Hello World'
 c = iter(range(5))

 x = np.asarray(a)
 y = np.frombuffer(b, dtype = 'S1')
 z = np.fromiter(c, dtype = float)

 print(x)
 print(y)
 print(z)

運(yùn)行該腳本:

yngzmiao@yngzmiao-virtual-machine:~/test$ python numpy_test.py
[list([1, 2, 3]) list([4, 5])]
['H' 'e' 'l' 'l' 'o' ' ' 'W' 'o' 'r' 'l' 'd']
[0. 1. 2. 3. 4.]

ndarray的數(shù)據(jù)結(jié)構(gòu)

Numpy支持很多的數(shù)據(jù)類(lèi)型,下面就簡(jiǎn)單地列舉一下:

名稱(chēng) 描述
bool_ 布爾型數(shù)據(jù)類(lèi)型(True或者False)
int_/int8/int16/int32/int64 有符號(hào)整數(shù)
uint8/uint16/uint32/uint64 無(wú)符號(hào)整數(shù)
float_/float16/float32/float64 浮點(diǎn)數(shù)
complex_/complex64/complex128 復(fù)數(shù)

但如果是自定義的數(shù)據(jù)類(lèi)型,就需要通過(guò)dtype來(lái)確定了:

numpy.dtype(object, align, copy)

參數(shù)說(shuō)明:

名稱(chēng) 描述
object 要轉(zhuǎn)換為的數(shù)據(jù)類(lèi)型對(duì)象
align 如果為true,填充字段使其類(lèi)似C的結(jié)構(gòu)體
copy 復(fù)制dtype對(duì)象 ,如果為false,則是對(duì)內(nèi)置數(shù)據(jù)類(lèi)型對(duì)象的引用

例如,可以創(chuàng)建一個(gè)student的對(duì)象:

import numpy as np

if __name__ == "__main__":
 student = np.dtype([('name', 'S20'), ('age', 'i8'), ('score', 'f4')])
 a = np.array([('zhangsan', 18, 80), ('lisi', 19, 85)], dtype=student)
 print(a)

運(yùn)行該腳本:

yngzmiao@yngzmiao-virtual-machine:~/test$ python numpy_test.py
[('zhangsan', 18, 80.) ('lisi', 19, 85.)]

ndarray的屬性

ndarray有兩個(gè)非常常用的屬性,shape和size。shape表示數(shù)組的維度,對(duì)于二維數(shù)組而言,就是其行數(shù)和列數(shù);size表示數(shù)組元素的總個(gè)數(shù),對(duì)于二維數(shù)組而言,就是行數(shù)與列數(shù)的相乘。

例如:

import numpy as np

if __name__ == "__main__":
 a = np.array([[1, 2, 3], [4, 5, 6]])
 print(a.shape)
 print(a.size)

運(yùn)行該腳本:

yngzmiao@yngzmiao-virtual-machine:~/test$ python numpy_test.py
(2, 3)
6

當(dāng)然,ndarray對(duì)象提供了兩種方式在不改變數(shù)據(jù)內(nèi)容的情況下,改變一個(gè)數(shù)組的格式。但兩種方式有所區(qū)別:

import numpy as np

if __name__ == "__main__":
 a = np.array([[1, 2, 3], [4, 5, 6]])
 a.shape = (3, 2)         # 直接改變本體
 print(a)
 b = a.reshape(2, 3)        # 本體不改變,將改變后的對(duì)象返回
 print(b)

運(yùn)行該腳本:

yngzmiao@yngzmiao-virtual-machine:~/test$ python numpy_test.py
[[1 2]
 [3 4]
 [5 6]]
[[1 2 3]
 [4 5 6]]

ndarray的內(nèi)容訪問(wèn)

ndarray對(duì)象的內(nèi)容可以通過(guò)索引或切片來(lái)訪問(wèn)和修改,與python中l(wèi)ist的切片操作一樣。

ndarray既可以基于下標(biāo)進(jìn)行切片,也可以通過(guò)內(nèi)置的slice函數(shù),并設(shè)置start,stop及step參數(shù)進(jìn)行,從原數(shù)組中切割出一個(gè)新數(shù)組。

例如:

import numpy as np

if __name__ == "__main__":
 a = np.arange(10)
 b = a[1:7:1]
 s = slice(1,7,1)
 c = a[s]

 print(a)
 print(b)
 print(c)

運(yùn)行該腳本:

yngzmiao@yngzmiao-virtual-machine:~/test$ python numpy_test.py
[0 1 2 3 4 5 6 7 8 9]
[1 2 3 4 5 6]
[1 2 3 4 5 6]

對(duì)于冒號(hào):的解釋?zhuān)?/p>

  • 如果是一維數(shù)組,如果只放置一個(gè)參數(shù),如[2],將返回與該索引相對(duì)應(yīng)的單個(gè)元素。如果為[2:],表示從該索引開(kāi)始以后的所有項(xiàng)都將被提取。如果使用了兩個(gè)參數(shù),如[2:7],那么則提取兩個(gè)索引(不包括停止索引)之間的項(xiàng);
  • 如果是多維數(shù)組,使用,區(qū)分維數(shù)。

例如:

import numpy as np

if __name__ == "__main__":
 a = np.arange(25)
 a.shape = (5, 5)

 b = a[1:4, 2:4]
 print(a)
 print(b)

運(yùn)行該腳本:

yngzmiao@yngzmiao-virtual-machine:~/test$ python numpy_test.py
[[ 0  1  2  3  4]
 [ 5  6  7  8  9]
 [10 11 12 13 14]
 [15 16 17 18 19]
 [20 21 22 23 24]]
[[ 7  8]
 [12 13]
 [17 18]]

ndarray除了基于下標(biāo)進(jìn)行切片,還有一些高級(jí)索引方式,比如布爾索引、花式索引。

例如:

import numpy as np

if __name__ == "__main__":
 a = np.arange(25)
 a.shape = (5, 5)

 b = a[a > 6]
 c = a[[3, 2, 4]]
 print(a)
 print(b)
 print(c)

運(yùn)行該腳本:

yngzmiao@yngzmiao-virtual-machine:~/test$ python numpy_test.py
[[ 0  1  2  3  4]
 [ 5  6  7  8  9]
 [10 11 12 13 14]
 [15 16 17 18 19]
 [20 21 22 23 24]]
[ 7  8  9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24]
[[15 16 17 18 19]
 [10 11 12 13 14]
 [20 21 22 23 24]]

其他

判斷元素對(duì)象是都為NaN:

np.isnan(...)

Numpy的廣播

如果兩個(gè)ndarray:a和b形狀相同,即滿(mǎn)足a.shape==b.shape,那么a與b的算數(shù)結(jié)果就是a與b數(shù)組對(duì)應(yīng)位做算術(shù)運(yùn)算。這要求維數(shù)相同,且各維度的長(zhǎng)度相同。

例如:

import numpy as np

if __name__ == "__main__":
 a = np.array([1, 2, 3])
 b = np.array([1, 2, 3])
 c = a + b
 d = a * b
 
 print(c)
 print(d)
 

運(yùn)行該腳本:

yngzmiao@yngzmiao-virtual-machine:~/test$ python numpy_test.py
[2 4 6]
[1 4 9]

而,廣播是Numpy對(duì)不同形狀(shape)的ndarray進(jìn)行數(shù)值計(jì)算的方式,對(duì)ndarray的算術(shù)運(yùn)算通常在相應(yīng)的元素上進(jìn)行。

怎么才算是相應(yīng)的元素呢?

雖然,廣播是對(duì)不同形狀(shape)而言,但其實(shí)還是要滿(mǎn)足兩個(gè)條件:列數(shù)相同,有一個(gè)行數(shù)為1。在這個(gè)前提下,每行的相同列的元素就是相對(duì)應(yīng)的元素。

直接看文字可能還是有點(diǎn)不太能理解,可以看一下例子:

import numpy as np

if __name__ == "__main__":
 a = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
 b = np.array([1, 2, 3])
 c = a + b
 d = a * b
 
 print(c)
 print(d)

運(yùn)行該腳本:

yngzmiao@yngzmiao-virtual-machine:~/test$ python numpy_test.py
[[ 2  4  6]
 [ 5  7  9]
 [ 8 10 12]]
[[ 1  4  9]
 [ 4 10 18]
 [ 7 16 27]]

所謂廣播就是:當(dāng)列數(shù)相同的時(shí)候,行數(shù)為1的ndarray會(huì)進(jìn)行擴(kuò)行的操作,增加的行數(shù)內(nèi)容與原行的內(nèi)容相同。

擴(kuò)行的實(shí)現(xiàn)可以通過(guò)tile函數(shù)實(shí)現(xiàn):

np.tile(obj, (行, 列))    # 在行上和列上分別重復(fù)一定的次數(shù)

所以,上文的廣播也可以通過(guò)下面的方式來(lái)代替:

import numpy as np

if __name__ == "__main__":
 a = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
 b = np.array([1, 2, 3])
 bb = np.tile(b, (3, 1))
 c = a + bb
 d = a * bb
 
 print(bb)
 print(c)
 print(d)

運(yùn)行該腳本:

yngzmiao@yngzmiao-virtual-machine:~/test$ python numpy_test.py
[[1 2 3]
 [1 2 3]
 [1 2 3]]
[[ 2  4  6]
 [ 5  7  9]
 [ 8 10 12]]
[[ 1  4  9]
 [ 4 10 18]
 [ 7 16 27]]

ndarray的函數(shù)

ndarray提供了很多的數(shù)學(xué)函數(shù)、算術(shù)函數(shù)、排序函數(shù),以便進(jìn)行運(yùn)算。

ndarray的數(shù)學(xué)函數(shù),例如:

np.pi          # 圓周率
np.sin(obj)       # 三角運(yùn)算
np.cos(obj)
np.tan(obj)
np.arcsin(obj)     # 反三角運(yùn)算
np.arccos(obj)
np.arctan(obj)
np.degrees(obj)     # 將弧度值轉(zhuǎn)換為角度值

np.around(obj, decimals) # 返回ndarray每個(gè)元素的四舍五入值,decimals為舍入的小數(shù)位數(shù),默認(rèn)為0
np.floor(obj)      # 向下取整
np.ceil(obj)      # 向上取整

ndarray的算術(shù)函數(shù),例如:

np.add(obj1, obj2)        # 加減乘除運(yùn)算,與+-*/效果一致,需要符合廣播原則
np.subtract(obj1, obj2)
np.multiply(obj1, obj2)
np.divide(obj1, obj2)
np.mod(obj1, obj2)        # 求余數(shù)運(yùn)算

np.reciprocal(obj)        # 元素取倒數(shù)

np.power(obj1, obj2)       # 計(jì)算前參數(shù)為底,后參數(shù)為冪的值

ndarray的排序函數(shù),例如:

np.sort(obj, axis=1, kind='quicksort', order)

參數(shù)說(shuō)明:

名稱(chēng) 描述
obj 數(shù)組或嵌套的數(shù)列
axis axis=0按列排序,axis=1按行排序
kind ‘quicksort'、‘mergesort'、‘heapsort'
order 如果數(shù)組包含字段,則是要排序的字段

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • 基于Python制作炸金花游戲的過(guò)程詳解

    基于Python制作炸金花游戲的過(guò)程詳解

    《詐金花》又叫三張牌,是在全國(guó)廣泛流傳的一種民間多人紙牌游戲。比如JJ比賽中的詐金花(贏三張),具有獨(dú)特的比牌規(guī)則。本文江將通過(guò)Python語(yǔ)言實(shí)現(xiàn)這一游戲,需要的可以參考一下
    2022-02-02
  • Python Web框架Flask中使用新浪SAE云存儲(chǔ)實(shí)例

    Python Web框架Flask中使用新浪SAE云存儲(chǔ)實(shí)例

    這篇文章主要介紹了Python Web框架Flask中使用新浪SAE云存儲(chǔ)實(shí)例,本文是對(duì)SAE云存儲(chǔ)的簡(jiǎn)單封裝,需要的朋友可以參考下
    2015-02-02
  • python+opencv邊緣提取與各函數(shù)參數(shù)解析

    python+opencv邊緣提取與各函數(shù)參數(shù)解析

    這篇文章主要介紹了python+opencv邊緣提取與各函數(shù)參數(shù)解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-03-03
  • Python實(shí)現(xiàn)批量采集商品數(shù)據(jù)的示例詳解

    Python實(shí)現(xiàn)批量采集商品數(shù)據(jù)的示例詳解

    這篇文章主要為大家詳細(xì)介紹了如何利用Python實(shí)現(xiàn)批量采集商品的數(shù)據(jù),文中的示例代碼講解詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • Matplotlib實(shí)戰(zhàn)之直方圖繪制詳解

    Matplotlib實(shí)戰(zhàn)之直方圖繪制詳解

    直方圖,又稱(chēng)質(zhì)量分布圖,用于表示數(shù)據(jù)的分布情況,是一種常見(jiàn)的統(tǒng)計(jì)圖表,這篇文章主要為大家詳細(xì)介紹了如何使用Matplotlib繪制直方圖,需要的可以參考下
    2023-08-08
  • Python網(wǎng)絡(luò)爬蟲(chóng)的基本原理解析

    Python網(wǎng)絡(luò)爬蟲(chóng)的基本原理解析

    如果要獲取網(wǎng)絡(luò)上數(shù)據(jù),我們要給爬蟲(chóng)一個(gè)網(wǎng)址(程序中通常叫URL),爬蟲(chóng)發(fā)送一個(gè)HTTP請(qǐng)求給目標(biāo)網(wǎng)頁(yè)的服務(wù)器,服務(wù)器返回?cái)?shù)據(jù)給客戶(hù)端(也就是我們的爬蟲(chóng)),爬蟲(chóng)再進(jìn)行數(shù)據(jù)解析、保存等一系列操作,需要的朋友可以參考下
    2023-05-05
  • pandas分組聚合(agg,transform,apply)

    pandas分組聚合(agg,transform,apply)

    在SQL中我們經(jīng)常使用 GROUP BY 將某個(gè)字段,按不同的取值進(jìn)行分組, 在pandas中也有g(shù)roupby函數(shù),本文主要介紹了pandas分組聚合(agg,transform,apply),具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-04-04
  • Python實(shí)現(xiàn)發(fā)票自動(dòng)校核微信機(jī)器人的方法

    Python實(shí)現(xiàn)發(fā)票自動(dòng)校核微信機(jī)器人的方法

    這篇文章主要介紹了Python實(shí)現(xiàn)發(fā)票自動(dòng)校核微信機(jī)器人的方法,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-05-05
  • python分別打包出32位和64位應(yīng)用程序

    python分別打包出32位和64位應(yīng)用程序

    本文給大家分享的是如何使用python打包出32位和64位的應(yīng)用程序的方法,非常的簡(jiǎn)單實(shí)用,有需要的小伙伴可以參考下
    2020-02-02
  • 詳解Python實(shí)現(xiàn)字典合并的四種方法

    詳解Python實(shí)現(xiàn)字典合并的四種方法

    這篇文章主要為大家詳細(xì)介紹了Python的合并字典的四種方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助
    2022-03-03

最新評(píng)論