Numpy庫(kù)的使用介紹

導(dǎo)言

Numpy庫(kù)是Python進(jìn)行科學(xué)計(jì)算的基礎(chǔ)庫(kù)旺聚,它是一個(gè)由多維數(shù)組對(duì)象組成,包含數(shù)學(xué)運(yùn)算眶蕉、邏輯運(yùn)算砰粹、形狀操作、排序造挽、選擇碱璃、I/O弄痹、離散傅里葉變換、基本線性代數(shù)嵌器、基本統(tǒng)計(jì)運(yùn)算肛真、隨機(jī)模擬等功能。本文將介紹Numpy庫(kù)的基本操作和簡(jiǎn)單應(yīng)用爽航。

官方參考文檔鏈接: NumPy Reference — NumPy v1.20 Manual

1 Numpy庫(kù)的安裝

在Linux和macOS系統(tǒng)下的安裝:

sudo pip install numpy

在Windows系統(tǒng)下的安裝:

pip install numpy

2 Numpy 數(shù)組

首先導(dǎo)入numpy庫(kù)

import numpy as np

我們可以使用np.zeros創(chuàng)建一個(gè)只包含0的數(shù)組蚓让。

a = np.zeros(3)
print(a)
print(type(a)) # 打印變量a的類型

輸出結(jié)果如下:

array([0., 0., 0.])
numpy.ndarray

Numpy數(shù)組和Python自帶的列表有些類似,但是在Numpy數(shù)組中岳掐,每一個(gè)元素的數(shù)據(jù)類型必須相同凭疮。常見(jiàn)的數(shù)據(jù)類型包括:1. float64: 64 位浮點(diǎn)型數(shù)字饭耳,2. int64: 64 位整數(shù)型數(shù)字串述,3. bool: 8 位 True 或者 False判斷。通常來(lái)說(shuō)寞肖,默認(rèn)的數(shù)據(jù)類型為float64纲酗。

輸入以下代碼:

a = np.zeros(3)
print(type(a[0]))
a = np.zeros(3, dtype=int) # 把數(shù)據(jù)類型轉(zhuǎn)化為整數(shù)型
print(type(a[0]))

輸出結(jié)果如下:

numpy.float64
numpy.int64

3 數(shù)組維度

建立一個(gè)長(zhǎng)度為10,元素均為0的數(shù)組z

z = np.zeros(10)

目前z數(shù)組沒(méi)有維度新蟆,既不是行向量也不是列向量觅赊。數(shù)組的維度由shape屬性記錄,記錄在一個(gè)元組中琼稻。

print(z.shape)

輸出結(jié)果如下:

(10,)

輸出結(jié)果中的元組只含有一個(gè)元素吮螺,代表數(shù)組的長(zhǎng)度。為了使數(shù)組具有維度帕翻,我們可以改變shape屬性鸠补。

z.shape = (10, 1)
print(z)

輸出結(jié)果如下:

array([[0.],
       [0.],
       [0.],
       [0.],
       [0.],
       [0.],
       [0.],
       [0.],
       [0.],
       [0.]])
z = np.zeros(4)
z.shape = (2, 2)
print(z)

輸出結(jié)果如下:

array([[0., 0.],
       [0., 0.]])

4 創(chuàng)建數(shù)組

我們先前提到過(guò),np.zeros能構(gòu)建元素為0的數(shù)組嘀掸,np.ones則與之類似紫岩,能構(gòu)建元素為1的數(shù)組。另一個(gè)類似的函數(shù)是np.empty睬塌,它能在內(nèi)存中創(chuàng)建一個(gè)空數(shù)組泉蝌,以備之后填入數(shù)據(jù)。

z = np.empty(3)
print(z)

輸出結(jié)果如下:

array([0., 0., 0.])

為了創(chuàng)建均勻間隔創(chuàng)建數(shù)值序列揩晴,我們可以使用np.linspace函數(shù)

z = np.linspace(start = 0, stop = 100, num = 5)
print(z)

輸出結(jié)果如下:

array([ 0., 25., 50., 75., 100.])

為創(chuàng)建單位矩陣勋陪,我們可以使用np.identity或者np.eye函數(shù)

z = np.identity(2)
print(z)

輸出結(jié)果如下:

array([[1., 0.],
       [0., 1.]])

此外,使用np.array函數(shù)硫兰,Python的列表粥鞋,元組等也能轉(zhuǎn)換為Numpy數(shù)組

a = np.array([10, 20]) # 使用列表構(gòu)建數(shù)組
print(a)
b = np.array((10, 20), dtype=float) # 使用元組構(gòu)建數(shù)組
# dtype 選項(xiàng)可以指定數(shù)據(jù)類型
print(b)
c = np.array([[1, 2], [3, 4]]) # 使用列表嵌套列表構(gòu)建數(shù)組
print(c)

輸出結(jié)果如下:

array([10, 20])
array([10., 20.])
array([[1, 2],
       [3, 4]])

Numpy數(shù)組中也存在深拷貝和淺拷貝的區(qū)別,深拷貝即再內(nèi)存中新建一個(gè)數(shù)據(jù)副本瞄崇,兩個(gè)數(shù)組內(nèi)存地址不同呻粹,可以分別修改壕曼,淺拷貝即不在內(nèi)存中新建地址,僅僅引用之前的地址等浊,兩個(gè)數(shù)組內(nèi)存地址相同腮郊,只能同時(shí)修改

a = np.random.randn(3)
print(a)
b = a
b[0] = 0.0
print(a)
# 淺拷貝
a = np.random.randn(3)
print(a)
b = np.copy(a)
print(b)
# 深拷貝

輸出結(jié)果如下:

array([-0.09651763, -0.4620335 , 1.2756674 ])
array([ 0. , -0.4620335, 1.2756674])
array([ 0.81440966, -1.05123774, -1.24405026])
array([ 0.81440966, -1.05123774, -1.24405026])

5 數(shù)組的索引

對(duì)于一維數(shù)組或者沒(méi)有維度的數(shù)組,索引的方式和Python類似

z = np.linspace(1, 2, 5)
print(z)
print(z[0])
print(Z[0:2])
print(z[-1])

輸出結(jié)果如下:

array([1. , 1.25, 1.5 , 1.75, 2. ])
1.0
array([1. , 1.25])
2.0

對(duì)于多維數(shù)組筹燕,索引方式如下:

z = np.array([[1, 2], [3, 4]])
print(z)
print(z[0, 0])
print(z[0, 1])

輸出結(jié)果如下:

array([[1, 2],
       [3, 4]])    
1
2

多維列表中轧飞,若要提取行和列

print(z[0, :])
print(z[:, 1])

輸出結(jié)果如下:

array([1, 2])
array([2, 4])

NumPy也能通過(guò)構(gòu)建新的數(shù)組作為索引提取數(shù)據(jù)

z = np.linspace(2, 4, 5)
print(z)
indices = np.array((0, 2, 3))
print(z[indices])

輸出結(jié)果如下:

array([2. , 2.5, 3. , 3.5, 4. ])
array([2. , 3. , 3.5])

最后,布爾類型的數(shù)據(jù)也可用于提取元素

d = np.array([0, 1, 1, 0, 0], dtype=bool)
print(d)
print(z[d])

輸出結(jié)果如下:

array([False, True, True, False, False])
array([2.5, 3. ])

6 數(shù)組的方法

數(shù)組有非常多的方法撒踪,一些常見(jiàn)的方法如下:

a = np.array((4, 3, 2, 1))
print(a)
print("sort =",a.sort())   # 對(duì)數(shù)組a進(jìn)行排序
print("sum =",a.sum())  # 對(duì)數(shù)組a進(jìn)行求和
print("mean =",a.mean())   # 求出數(shù)組a的均值
print("max =",a.max())   # 求出數(shù)組a的最大值
print("argmax =",a.argmax())   # 返回最大元素的索引
print("cumsum =",a.cumsum())   # 對(duì)每個(gè)元素累積求和
print("cumprod =",a.cumprod())    # 對(duì)每個(gè)元素累積求積
print("var =",a.var())  # 求數(shù)組a的方差
print("std =", a.std())   # 求數(shù)組a的標(biāo)準(zhǔn)差
a.shape = (2, 2)
print(a.T)  # 對(duì)數(shù)組a進(jìn)行轉(zhuǎn)置

輸出結(jié)果如下:

array([4, 3, 2, 1])
sort = array([1, 2, 3, 4])
sum = 10
mean = 2.5
max = 4
argmax = 3
cumsum = array([ 1, 3, 6, 10])
cumprod = array([ 1, 2, 6, 24])
var = 1.25
std = 1.118033988749895
array([[1, 3],
       [2, 4]])

7 數(shù)組的操作

7.1 算術(shù)操作

a = np.array([1, 2, 3, 4])
b = np.array([5, 6, 7, 8])
print(a + b)    # 加
print(a * b)    # 乘
print(a + 10)    # 對(duì)每個(gè)元素添加一個(gè)標(biāo)量
print(a * 10)    # 對(duì)每個(gè)元素乘一個(gè)標(biāo)量

輸出結(jié)果如下:

array([ 6, 8, 10, 12])
array([ 5, 12, 21, 32])
array([11, 12, 13, 14])
array([10, 20, 30, 40])

7.2 矩陣乘法

A = np.ones((2, 2))
B = np.ones((2, 2))
print(A @ B)  # 兩個(gè)矩陣相乘

輸出結(jié)果如下:

array([[2., 2.],
       [2., 2.]])
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
禁止轉(zhuǎn)載过咬,如需轉(zhuǎn)載請(qǐng)通過(guò)簡(jiǎn)信或評(píng)論聯(lián)系作者。
  • 序言:七十年代末制妄,一起剝皮案震驚了整個(gè)濱河市掸绞,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌耕捞,老刑警劉巖衔掸,帶你破解...
    沈念sama閱讀 217,084評(píng)論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異俺抽,居然都是意外死亡敞映,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,623評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門磷斧,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)振愿,“玉大人,你說(shuō)我怎么就攤上這事弛饭∶崮” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 163,450評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵孩哑,是天一觀的道長(zhǎng)栓霜。 經(jīng)常有香客問(wèn)我,道長(zhǎng)横蜒,這世上最難降的妖魔是什么胳蛮? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,322評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮丛晌,結(jié)果婚禮上仅炊,老公的妹妹穿的比我還像新娘。我一直安慰自己澎蛛,他們只是感情好抚垄,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,370評(píng)論 6 390
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著,像睡著了一般呆馁。 火紅的嫁衣襯著肌膚如雪桐经。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 51,274評(píng)論 1 300
  • 那天浙滤,我揣著相機(jī)與錄音阴挣,去河邊找鬼。 笑死纺腊,一個(gè)胖子當(dāng)著我的面吹牛畔咧,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播揖膜,決...
    沈念sama閱讀 40,126評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼誓沸,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了壹粟?” 一聲冷哼從身側(cè)響起拜隧,我...
    開(kāi)封第一講書(shū)人閱讀 38,980評(píng)論 0 275
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎煮寡,沒(méi)想到半個(gè)月后虹蓄,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體犀呼,經(jīng)...
    沈念sama閱讀 45,414評(píng)論 1 313
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡幸撕,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,599評(píng)論 3 334
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了外臂。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片坐儿。...
    茶點(diǎn)故事閱讀 39,773評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖宋光,靈堂內(nèi)的尸體忽然破棺而出貌矿,到底是詐尸還是另有隱情,我是刑警寧澤罪佳,帶...
    沈念sama閱讀 35,470評(píng)論 5 344
  • 正文 年R本政府宣布逛漫,位于F島的核電站,受9級(jí)特大地震影響赘艳,放射性物質(zhì)發(fā)生泄漏酌毡。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,080評(píng)論 3 327
  • 文/蒙蒙 一蕾管、第九天 我趴在偏房一處隱蔽的房頂上張望枷踏。 院中可真熱鬧,春花似錦掰曾、人聲如沸旭蠕。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,713評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)掏熬。三九已至佑稠,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間旗芬,已是汗流浹背讶坯。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,852評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留岗屏,地道東北人辆琅。 一個(gè)月前我還...
    沈念sama閱讀 47,865評(píng)論 2 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像这刷,于是被迫代替她去往敵國(guó)和親婉烟。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,689評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容