NumPy 數(shù)組大全

翻譯:瘋狂的技術(shù)宅
原文:https://www.codementor.io/likegeeks/python-numpy-array-tutorial-rw4gnhfg0

NumPy 是一個(gè)Python 庫(kù)渴庆,用于 Python 編程中的科學(xué)計(jì)算。在本教程中雅镊,你將學(xué)習(xí)如何在 NumPy 數(shù)組上以多種方式添加襟雷、刪除、排序和操作元素仁烹。

NumPy 提供了一個(gè)多維數(shù)組對(duì)象和其他派生數(shù)組耸弄,例如掩碼數(shù)組和掩碼多維數(shù)組。

為什么要用 NumPy

NumPy 提供了一個(gè) ndarray 對(duì)象晃危,可以使用它來(lái)對(duì)任何維度的數(shù)組進(jìn)行操作叙赚。 ndarray 代表 N 維數(shù)組,其中 N 是任意數(shù)字僚饭。這意味著 NumPy 數(shù)組可以是任何維度的震叮。

與 Python 的 List 相比,NumPy 具有許多優(yōu)勢(shì)鳍鸵。我們可以在 NumPy 陣列上執(zhí)行高性能操作圆到,例如:

  1. 對(duì)數(shù)組成員進(jìn)行排序
  2. 數(shù)學(xué)和邏輯運(yùn)算
  3. 輸入/輸出功能
  4. 統(tǒng)計(jì)和線(xiàn)性代數(shù)運(yùn)算

安裝 NumPy

要安裝NumPy篷角,你的電腦上要先有 Python 和 Pip摊沉。

在終端中運(yùn)行以下命令:

pip install numpy

然后你就可以在腳本中導(dǎo)入 NumPy 了,如下所示:

import numpy

添加數(shù)組元素

可以用 NumPy 模塊的 append() 方法向 NumPy 數(shù)組中添加元素哲嘲。

append() 的語(yǔ)法如下:

numpy.append(array, value, axis)

value 會(huì)被追加到在數(shù)組的末尾,并返回一個(gè)包含所有元素的 ndarray媳禁。

參數(shù) axis 是一個(gè)可選的整數(shù)眠副,用于定義數(shù)組的顯示方式。如果沒(méi)有指定竣稽,則數(shù)組結(jié)構(gòu)將展平囱怕,稍后會(huì)演示用法。

以下示例毫别,其中首先聲明數(shù)組娃弓,然后用 append 方法向數(shù)組添加更多的值:

import numpy
a = numpy.array([1, 2, 3])
newArray = numpy.append (a, [10, 11, 12])
print(newArray)
# 輸出:[ 1  2  3 10 11 12]

添加一列

也可以用NumPy 的 append() 方法插入一列。

在下面的例子中岛宦,我們創(chuàng)建了一個(gè)二維數(shù)組并插入了兩列:

import numpy

a = numpy.array([[1, 2, 3], [4, 5, 6]]) 
b = numpy.array([[400], [800]])
newArray = numpy.append(a, b, axis = 1)
print(newArray)

"""
輸出:
[[  1   2   3 400]
 [  4   5   6 800]]
"""

如果沒(méi)有使用 axis 參數(shù)台丛,則會(huì)輸出:

[  1   2   3   4   5   6 400 800]

這就是數(shù)組結(jié)構(gòu)的扁平化。

在 NumPy 中砾肺,還可以用 insert() 方法插入元素或列挽霉。 兩者之間的區(qū)別在于 insert() 方法可以指定要在哪個(gè)索引處添加元素,但 append() 方法會(huì)在數(shù)組的末尾添加一個(gè)值债沮。

Consider the example below:
考慮以下示例:

import numpy
a = numpy.array([1, 2, 3])
newArray = numpy.insert(a, 1, 90) 
print(newArray)
# 輸出:[ 1 90  2  3]

這里 insert() 方法在索引1處添加元素炼吴。在Python中數(shù)組索引從0開(kāi)始。

追加一行

也可以用 append() 方法向數(shù)組添加行疫衩,就像在數(shù)組中附加元素一樣簡(jiǎn)單:

import numpy
a = numpy.array([[1, 2, 3], [4, 5, 6]])
newArray = numpy.append(a, [[50, 60, 70]], axis = 0)
print(newArray)
"""
輸出“
[[ 1  2  3]
 [ 4  5  6]
 [50 60 70]]
"""

刪除元素

可以用 NumPy 模塊的 delete() 方法刪除 NumPy 數(shù)組元素:

import numpy 
a = numpy.array([1, 2, 3]) 
newArray = numpy.delete(a, 1, axis = 0) 
print(newArray)
# 輸出:[1 3]

在本例子中,我們有一個(gè)一維數(shù)組荣德,用 delete() 方法從數(shù)組中刪除了索引 1 處的元素闷煤。

刪除一行

同樣,你也可以用 delete() 方法刪除行涮瞻。

下面的例子中我們從二維數(shù)組中刪除了一行:

import numpy 
a = numpy.array([[1, 2, 3], [4, 5, 6], [10, 20, 30]]) 
newArray = numpy.delete(a, 1, axis = 0)
print(newArray)
"""
輸出:
[[ 1  2  3]
 [10 20 30]]
"""

delete() 方法中鲤拿,首先給出數(shù)組,然后給出要?jiǎng)h除的元素的索引署咽。在上例中近顷,我們刪除了索引為 1 的元素。

檢查 NumPy 數(shù)組是否為空

可以用 size 方法返回?cái)?shù)組中元素的總數(shù)宁否。

在下面的例子中有一個(gè) if 語(yǔ)句窒升,通過(guò) ndarray.size 檢查數(shù)組中是否有元素,其中 ndarray 可以是任何給定的 NumPy 數(shù)組:

import numpy

a = numpy.array([1, 2, 3]) 
if(a.size == 0): 
    print("The given Array is empty") 
else: 
    print("The array = ", a)
# 輸出:The array =  [1 2 3]

在上面的代碼中慕匠,數(shù)組中有三個(gè)元素饱须,因此它不是空的,判斷條件將返回false台谊。如果數(shù)組中沒(méi)有元素蓉媳,則 if 條件會(huì)變?yōu)?true 并且將打印空消息譬挚。如果數(shù)組等于:

a = numpy.array([])

上述代碼將會(huì)輸出:

The given Array is empty

查找值的索引

要查找值對(duì)應(yīng)的索引,可以用 NumPy 模塊的 where() 方法酪呻,如下例所示:

import numpy
a = numpy.array([1, 2, 3, 4, 5])
print("5 is found at index: ", numpy.where(a == 5))
# 輸出:5 is found at index:  (array([4]),)

如果你只想得到索引减宣,可以這樣寫(xiě):

import numpy

a = numpy.array([1, 2, 3, 4, 5]) 
index = numpy.where(a == 5)
print("5 is found at index: ", index[0])
#輸出: 5 is found at index:  [4]

NumPy 數(shù)組切片

數(shù)組切片是從給定數(shù)組中提取子集的過(guò)程。你可以用冒號(hào)( : )運(yùn)算符對(duì)數(shù)組進(jìn)行切片玩荠,并指定數(shù)組索引的開(kāi)始和結(jié)束位置蚪腋,例如:

array[from:to]

下面的例子中提取從索引 2 到索引 5 的元素:

import numpy
a = numpy.array([1, 2, 3, 4, 5, 6, 7, 8])
print("A subset of array a = ", a[2:5])
# 輸出:A subset of array a =  [3 4 5]

如果想要提取最后三個(gè)元素,可以通過(guò)用負(fù)切片來(lái)完成操作姨蟋,如下所示:

import numpy
a = numpy.array([1, 2, 3, 4, 5, 6, 7, 8])
print("A subset of array a = ", a[-3:])
# 輸出:A subset of array a =  [6 7 8]

將函數(shù)作用于所有數(shù)組元素

在下面的例子中屉凯,我們將創(chuàng)建一個(gè) lambda 函數(shù),并傳入一個(gè)數(shù)組眼溶,以其應(yīng)用于所有元素:

import numpy
addition = lambda x: x + 2
a = numpy.array([1, 2, 3, 4, 5, 6])
print("Array after addition function: ", addition(a))
# 輸出:Array after addition function:  [3 4 5 6 7 8] 

在此例中悠砚,創(chuàng)建了一個(gè) lambda 函數(shù),它使每個(gè)元素都遞增 2堂飞。

NumPy 數(shù)組的長(zhǎng)度

要得到 NumPy 數(shù)組的長(zhǎng)度灌旧,可以用 size 屬性,如下所示:

import numpy 
a = numpy.array([1, 2, 3, 4, 5, 6]) 
print("The size of array = ", a.size)
# 輸出:The size of array =  6

從 list 創(chuàng)建 NumPy 數(shù)組

假設(shè)你有一個(gè)列表:

l = [1, 2, 3, 4, 5]

現(xiàn)在要根據(jù)這個(gè)列表創(chuàng)建一個(gè)數(shù)組绰筛,可以用 NumPy 模塊的 array() 方法:

import numpy 
l = [1, 2, 3, 4, 5] 
a = numpy.array(l) 
print("The NumPy array from Python list = ", a)
# 輸出:The NumPy array from Python list =  [1 2 3 4 5]

同樣枢泰,使用 array() 方法,也可以從元組創(chuàng)建 NumPy 數(shù)組铝噩。如下所示:

import numpy
t = (1, 2, 3, 4, 5) 
a = numpy.array(t) 
print("The NumPy array from Python Tuple = ", a)
# 輸出:The NumPy array from Python Tuple =  [1 2 3 4 5]

將 NumPy 數(shù)組轉(zhuǎn)換為 list

要將數(shù)組轉(zhuǎn)換為list衡蚂,可以使用 NumPy 模塊的 tolist()方法。

import numpy 
a = numpy.array([1, 2, 3, 4, 5]) 
print("Array to list = ", a.tolist())
# 輸出:Array to list =  [1, 2, 3, 4, 5]

在這段代碼中骏庸,我們簡(jiǎn)單地調(diào)用了 tolist() 方法毛甲,該方法將數(shù)組轉(zhuǎn)換為列表。然后將新創(chuàng)建的列表打印到輸出屏幕具被。

把 NumPy 數(shù)組導(dǎo)出為 CSV

要將數(shù)組導(dǎo)出為 CSV 文件玻募,可以用 NumPy 模塊的 savetxt() 方法,如下所示:

import numpy 
a = numpy.array([1, 2, 3, 4, 5]) 
numpy.savetxt("myArray.csv", a)

此代碼將在 Python 代碼文件所在路徑下生成 CSV 文件一姿。當(dāng)然你也可以指定路徑七咧。

該文件的內(nèi)容如下:

1.000000000000000000e+00
2.000000000000000000e+00
3.000000000000000000e+00
4.000000000000000000e+00
5.000000000000000000e+00

你可以把額外填充的零刪除,如下所示:

numpy.savetxt("myArray.csv", a,fmt='%.2f')

對(duì) NumPy 數(shù)組排序

可以用 NumPy 模塊的 sort() 方法對(duì) NumPy 數(shù)組進(jìn)行排序:

sort() 函數(shù)有一個(gè)可選參數(shù) axis(整數(shù))叮叹,默認(rèn)為 -1艾栋。axis 指定我們要對(duì)數(shù)組進(jìn)行排序的軸。 -1 表示將根據(jù)最后一個(gè)軸對(duì)數(shù)組進(jìn)行排序衬横。

import numpy 
a = numpy.array([16, 3, 2, 6, 8, 10, 1]) 
print("Sorted array = ", numpy.sort(a))
# 輸出:Sorted array =  [ 1  2  3  6  8 10 16]

在這個(gè)例子中裹粤,我們?cè)?print 語(yǔ)句中調(diào)用了 sort() 方法。數(shù)組 a 被傳遞給 sort 函數(shù)。

歸一化數(shù)組

歸一化數(shù)組是指將數(shù)組的值置于某個(gè)定義范圍的過(guò)程遥诉。例如拇泣,我們想要在 -1 和 1 之間對(duì)數(shù)組進(jìn)行歸一化,依此類(lèi)推矮锈。

歸一化的公式如下:

x = (x – xmin) / (xmax – xmin)

現(xiàn)在把這個(gè)公式用于我們的數(shù)組霉翔。要查找數(shù)組中的最大和最小項(xiàng),可以分別用 NumPy 的 max()min() 方法苞笨。

import numpy 
x= numpy.array([400, 800, 200, 700, 1000, 2000, 300]) 
xmax = x.max() 
xmin = x.min() 
x = (x - xmin)/(xmax - xmin) 
print("After normalization array x = \n", x)
"""
輸出:
After normalization array x =
 [0.11111111 0.33333333 0.         0.27777778 0.44444444 1.
 0.05555556]
"""

數(shù)組索引

索引指向數(shù)組中的一個(gè)元素债朵。在下面的例子中,分別用到了一維和二維數(shù)組中的索引:

import numpy 
a = numpy.array([20, 13, 42, 86, 81, 9, 11]) 
print("Element at index 3 = ", a[3])
# 輸出:Element at index 3 =  86

下面是二維數(shù)組:

import numpy 
a = numpy.array([[20, 13, 42], [86, 81, 9]]) 
print("Element at index a[1][2] = ", a[1][2])
# 輸出:Element at index a[1][2] =  9

索引 [1][2] 表示第二行和第三列(索引從 0 開(kāi)始)瀑凝。因此在屏幕上輸出 9 序芦。

將 NumPy 數(shù)組附加到另?一個(gè)數(shù)組上

可以用 append() 方法將 NumPy 數(shù)組附加到另??一個(gè) NumPy 數(shù)組上。

import numpy 
a = numpy.array([1, 2, 3, 4, 5]) 
b = numpy.array([10, 20, 30, 40, 50]) 
newArray = numpy.append(a, b) 
print("The new array = ", newArray)
# 輸出:The new array =  [ 1  2  3  4  5 10 20 30 40 50]

在此例中粤咪,創(chuàng)建兩個(gè) NumPy 數(shù)組 a谚中, b 。然后把兩個(gè)數(shù)組傳給 append()寥枝。當(dāng)數(shù)組 b 作為第二個(gè)參數(shù)傳遞時(shí)宪塔,將被添加到數(shù)組 a 的末尾。

總結(jié)

正如大家所見(jiàn)囊拜,NumPy 數(shù)組用起來(lái)非常簡(jiǎn)單某筐。在使用很多機(jī)器學(xué)習(xí)庫(kù)時(shí),NumPy 數(shù)組非常重要冠跷∧咸埽可以說(shuō)NumPy 是人工智能的大門(mén)。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末蔽莱,一起剝皮案震驚了整個(gè)濱河市弟疆,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌盗冷,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,214評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件同廉,死亡現(xiàn)場(chǎng)離奇詭異仪糖,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)迫肖,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,307評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門(mén)锅劝,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人蟆湖,你說(shuō)我怎么就攤上這事故爵。” “怎么了隅津?”我有些...
    開(kāi)封第一講書(shū)人閱讀 152,543評(píng)論 0 341
  • 文/不壞的土叔 我叫張陵诬垂,是天一觀的道長(zhǎng)劲室。 經(jīng)常有香客問(wèn)我,道長(zhǎng)结窘,這世上最難降的妖魔是什么很洋? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 55,221評(píng)論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮隧枫,結(jié)果婚禮上喉磁,老公的妹妹穿的比我還像新娘。我一直安慰自己官脓,他們只是感情好协怒,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,224評(píng)論 5 371
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著卑笨,像睡著了一般孕暇。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上湾趾,一...
    開(kāi)封第一講書(shū)人閱讀 49,007評(píng)論 1 284
  • 那天芭商,我揣著相機(jī)與錄音,去河邊找鬼搀缠。 笑死铛楣,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的艺普。 我是一名探鬼主播簸州,決...
    沈念sama閱讀 38,313評(píng)論 3 399
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼歧譬!你這毒婦竟也來(lái)了岸浑?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 36,956評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤瑰步,失蹤者是張志新(化名)和其女友劉穎矢洲,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體缩焦,經(jīng)...
    沈念sama閱讀 43,441評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡读虏,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,925評(píng)論 2 323
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了袁滥。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片盖桥。...
    茶點(diǎn)故事閱讀 38,018評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖题翻,靈堂內(nèi)的尸體忽然破棺而出揩徊,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 33,685評(píng)論 4 322
  • 正文 年R本政府宣布塑荒,位于F島的核電站熄赡,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏袜炕。R本人自食惡果不足惜本谜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,234評(píng)論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望偎窘。 院中可真熱鬧乌助,春花似錦、人聲如沸陌知。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,240評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)仆葡。三九已至赏参,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間沿盅,已是汗流浹背把篓。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,464評(píng)論 1 261
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留腰涧,地道東北人韧掩。 一個(gè)月前我還...
    沈念sama閱讀 45,467評(píng)論 2 352
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像窖铡,于是被迫代替她去往敵國(guó)和親疗锐。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,762評(píng)論 2 345

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

  • 基礎(chǔ)篇NumPy的主要對(duì)象是同種元素的多維數(shù)組费彼。這是一個(gè)所有的元素都是一種類(lèi)型滑臊、通過(guò)一個(gè)正整數(shù)元組索引的元素表格(...
    oyan99閱讀 5,112評(píng)論 0 18
  • 介紹 NumPy 是一個(gè) Python 包。 它代表 “Numeric Python”箍铲。 它是一個(gè)由多維數(shù)組對(duì)象和...
    喔蕾喔蕾喔蕾蕾蕾閱讀 1,756評(píng)論 0 5
  • 什么是NumPy雇卷? NumPy是Python中科學(xué)計(jì)算的基礎(chǔ)軟件包。它是一個(gè)提供多了維數(shù)組對(duì)象颠猴,多種派生對(duì)象(如:...
    iOSDevLog閱讀 2,909評(píng)論 0 0
  • 一聋庵、numpy概述 numpy(Numerical Python)提供了python對(duì)多維數(shù)組對(duì)象的支持:ndar...
    L_steven的貓閱讀 3,456評(píng)論 1 24
  • 3、個(gè)性化需求的滿(mǎn)足 垂直領(lǐng)域的企業(yè)在長(zhǎng)期發(fā)展過(guò)程中芙粱,已經(jīng)形成了自身特有的“拳法”,通用的信息化方式不能完全滿(mǎn)足企...
    豌豆黃兒閱讀 272評(píng)論 0 0