對Numpy中軸(axes)的解釋(漢化版)

  • 從困惑到解惑
  • 當(dāng)你困惑時,甚至需要顛覆世界觀思灰,原本的知識體系造成的理所當(dāng)然的直覺恰恰相反,像騎了一個往前蹬卻往后走的自行車一樣別扭難受--反直覺(Counter Intuitive)
  • 找到一個完美教程非常難得
  • 逐字不差的閱讀且逐字不差的翻譯
  • 借助翻譯軟件(節(jié)省時間打字)
  • 學(xué)好數(shù)據(jù)分析洒疚,得學(xué)好Numpy坯屿;學(xué)好Numpy巍扛,首先徹底理解“軸”的概念
閱讀原文:

NUMPY AXES EXPLAINED

解釋Numpy軸(axes)

本教程將介紹NumPy軸。

它將解釋NumPy軸是什么撤奸。本教程還將解釋軸如何工作,以及我們?nèi)绾螌⑺鼈兣cNumPy函數(shù)一起使用胧瓜。

在我詳細解釋NumPy軸之前,讓我先解釋為什么NumPy軸存在問題蒲肋。

NUMPY AXES很難理解

坦白來說。

NumPy軸是NumPy系統(tǒng)中最難理解的事情之一兜粘。如果您剛剛開始使用NumPy弯蚜,則尤其如此妹沙。許多初學(xué)者都很難理解NumPy軸的工作原理熟吏。

別擔(dān)心,不是你牵寺。許多Python數(shù)據(jù)科學(xué)初學(xué)者都在努力解決這個問題。

話雖如此趣斤,本教程將解釋您需要了解的有關(guān)NumPy數(shù)組中的軸的所有基本知識。

讓我們從基礎(chǔ)開始浓领。通過將NumPy軸連接到您已經(jīng)知道的東西势腮,我將使NumPy軸更容易理解。

NUMPY AXES類似于在坐標(biāo)系中的軸

如果您正在閱讀這篇博文捎拯,那么您可能需要參加幾門數(shù)學(xué)課程。

當(dāng)你第一次學(xué)習(xí)圖形時,回想一下早期的數(shù)學(xué)吗浩。您了解了笛卡爾坐標(biāo)。

NumPy軸與笛卡爾坐標(biāo)系中的軸非常相似懂扼。

類比:笛卡爾坐標(biāo)系坐標(biāo)軸

簡單的二維笛卡爾坐標(biāo)系具有兩個軸右蒲,即x軸和y軸微王。
這些軸基本上只是笛卡爾空間中的方向(正交方向)品嚣。
此外,我們可以通過它沿每個軸的位置來識別笛卡爾空間中點的位置翰撑。


image.png

NUMPY 的軸是行和列的方向

就像坐標(biāo)系一樣眶诈,NumPy陣列也有軸涨醋。


image.png

在二維NumPy數(shù)組中逝撬,軸是沿行和列的方向。

AXIS 0是沿著行的方向

假設(shè)我們討論的是多維數(shù)組溯警,那么軸0就是向下行的軸。


image.png

請記住梯轻,這確實適用于二維數(shù)組和多維數(shù)組尽棕。一維數(shù)組是一個特例,我將在本教程的后面解釋滔悉。

AXIS 1是沿著列的方向

在多維NumPy陣列中,axis1是第2軸回官。當(dāng)我們談?wù)摱S和多維數(shù)組時,axis1是橫跨列水平延伸的軸浙炼。


image.png

再一次唯袄,請記住弯屈,一維數(shù)組的工作方式略有不同恋拷。從技術(shù)上講,1-d陣列沒有軸1.我將在本教程后面詳細解釋蔬顾。

NUMPY ARRAY AXES以'0'開頭

在這一點上可能很明顯,但我應(yīng)該指出NumPy中的數(shù)組軸是編號的诀豁。

重要的是,它們從0開始編號娩践。

這就像Python序列的索引值一樣烹骨。在Python序列中 - 如列表和元組 - 序列中的值具有與之關(guān)聯(lián)的索引翻伺。

所以沮焕,假設(shè)我們有一個帶有幾個大寫字母的Python列表:

alpha_list = ['A','B','C','D']

如果我們檢索第一個項目的索引值('A')......

alpha_list.index('A')

......我們發(fā)現(xiàn)'A'位于索引位置0。

這里辣辫,A是列表中的第一項,但索引位置為0络它。

基本上所有的Python序列都是這樣的歪赢。在任何Python序列中 - 如列表化戳,元組或字符串 - 索引從0開始埋凯。

NumPy軸的編號基本上以相同的方式工作。它們從0開始編號白对。因此“第一”軸實際上是“axis0”◇扒疲“第二”軸是“axis1”沉颂,依此類推悦污。

Numpy數(shù)組中軸的結(jié)構(gòu)是重要的

在下一節(jié)中,我將向您展示如何在NumPy中使用NumPy軸的示例切端,但在我向您展示之前,您需要記住NumPy數(shù)組的結(jié)構(gòu)很重要昌屉。

我剛才解釋的細節(jié),關(guān)于軸編號间驮,以及哪個軸將影響您對我們使用的NumPy函數(shù)的理解马昨。話雖如此竞帽,在繼續(xù)討論示例之前偏陪,請確保您真正理解我上面解釋的有關(guān)Numpy軸的細節(jié)。

如果您有任何疑問或者您仍然對NumPy軸感到困惑笛谦,請在頁面底部的注釋中留下問題。

好】已現(xiàn)在灶轰,讓我們繼續(xù)討論這些例子谣沸。

關(guān)于如何使用NUMPY軸的示例

既然我們已經(jīng)解釋了NumPy軸的工作原理笋颤,那么讓我們看一下NumPy軸如何使用的一些具體例子。

這些示例很重要伴澄,因為它們有助于培養(yǎng)您對NumPy軸在與NumPy函數(shù)一起使用時如何工作的直覺

這尼瑪也太多了举农!還是挑重點把!0湓恪!

建議:注意軸參數(shù)控制的內(nèi)容

要了解如何在NumPy函數(shù)中使用axis參數(shù)棱貌,了解axis參數(shù)實際控制每個函數(shù)的內(nèi)容非常重要。

這聽起來并不總是那么簡單键畴。例如突雪,在np.sum()函數(shù)中,axis參數(shù)的行為方式很多人認(rèn)為是反直覺的惹想。

我將在一分鐘內(nèi)解釋它是如何工作的,但我需要強調(diào)這一點:非常注意axis參數(shù)實際控制每個函數(shù)的內(nèi)容嘀粱。

NUMPY SUM

在嘗試?yán)斫釴umPy sum中的axis時辰狡,您需要知道axis參數(shù)實際控制的是什么锋叨。
在np.sum()中宛篇,axis參數(shù)控制將聚合哪個軸
換句話說偷卧,axis參數(shù)控制哪個軸將被折疊
請記住听诸,sum()蚕泽,mean()晌梨,min()须妻,median()和其他統(tǒng)計函數(shù)等函數(shù)會聚合您的數(shù)據(jù)。
為了解釋“聚合”的含義掌逛,我將舉一個簡單的例子。
想象一下豆混,你有一組5個數(shù)字。如果總結(jié)這5個數(shù)字皿伺,結(jié)果將是一個數(shù)字。求和有效地匯總了您的數(shù)據(jù)鸵鸥。它將大量的值折疊為單個值。

類似地宋税,當(dāng)您在帶有axis參數(shù)的二維數(shù)組上使用np.sum()時讼油,它會將二維數(shù)組折疊為一維數(shù)組杰赛。它會折疊數(shù)據(jù)減少維度矮台。

但哪個軸會被折疊?

將NumPy和函數(shù)與axis參數(shù)一起使用時辰晕,指定的軸是折疊的軸

NUMPY SUM WITH AXIS = 0

在這里含友,我們將使用軸= 0的NumPy和函數(shù)蝉娜。

創(chuàng)建一個簡單的NumPy數(shù)組唱较。

np_array_2d = np.arange(0, 6).reshape([2,3])

print(np_array_2d)

[[0 1 2] 
 [3 4 5]]

接下來召川,讓我們使用axis= 0的NumPy求和函數(shù)sum。

np.sum(np_array_2d, axis = 0)

輸出:array([3, 5, 7])

當(dāng)我們設(shè)置axis = 0時汉形,該函數(shù)實際上對列進行求和。結(jié)果是一個新的NumPy數(shù)組概疆,其中包含每列的總和峰搪。為什么?軸0不是指行嗎概耻?

這讓許多初學(xué)者感到困惑罐呼,所以讓我解釋一下。

正如我之前提到的嫉柴,axis參數(shù)指示哪個軸折疊奉呛。


image.png

因此,當(dāng)我們設(shè)置axis = 0時瞧壮,我們不會對行進行求和。當(dāng)我們設(shè)置axis = 0時馁痴,我們正在聚合數(shù)據(jù)肺孤,以便我們折疊行......我們將軸0折疊。

AXIS = 1的NUMPY SUM
print(np_array_2d)

[[0 1 2]
 [3 4 5]]

np.sum(np_array_2d, axis = 1)

array([3, 12])

同樣小渊,使用sum()函數(shù),axis參數(shù)設(shè)置在求和過程中折疊的軸茫叭。


image.png

代碼具有跨列求和的效果。它折疊了axis1揍愁。

NUMPY CONCATENATE

現(xiàn)在讓我們來看一個不同的例子呐萨。

在這里莽囤,我們將在使用NumPy連接函數(shù)(np.concatenate())的上下文中使用axis參數(shù)。

當(dāng)我們將axis參數(shù)與np.concatenate()函數(shù)一起使用時惨远,axis參數(shù)定義了我們堆疊數(shù)組的軸。

看例子:

np_array_1s = np.array([[1,1,1],[1,1,1]])
np_array_9s = np.array([[9,9,9],[9,9,9]])

array([[1, 1, 1],
       [1, 1, 1]])

array([[9, 9, 9],
       [9, 9, 9]])

#*use NumPy concatenate with axis = 0*
np.concatenate([np_array_1s, np_array_9s], axis = 0)
#輸出
array([[1, 1, 1],
       [1, 1, 1],
       [9, 9, 9],
       [9, 9, 9]])

讓我們仔細評估語法在這里做了什么北秽。


image.png
#*use NumPy concatenate with axis = 1*
np.concatenate([np_array_1s, np_array_9s], axis = 1)
#輸出
array([[1, 1, 1, 9, 9, 9],
       [1, 1, 1, 9, 9, 9]])

但是最筒,讓我們快速回顧一下這里發(fā)生了什么。


image.png

警告:1維陣列的工作方式不同

希望這個NumPy軸教程可以幫助您了解NumPy軸的工作原理辙培。
但在我結(jié)束教程之前,我想給你一個警告:一維數(shù)組的工作方式不同虏冻!

一維NUMPY數(shù)組只有一個軸(即axis=0)
image.png
示例:連接1-D陣列(一維數(shù)組)
np_array_1s_1dim = np.array([1,1,1])
np_array_9s_1dim = np.array([9,9,9])

[1 1 1]
[9 9 9]

np.concatenate([np_array_1s_1dim, np_array_9s_1dim], axis = 0)

array([1, 1, 1, 9, 9, 9])

這個輸出讓許多初學(xué)者感到困惑。數(shù)組水平連接在一起领曼。

這與函數(shù)在二維數(shù)組上的工作方式不同。如果我們在二維數(shù)組上使用np.concatenate()和axis = 0庶骄,則數(shù)組將垂直連接在一起践磅。

在這種情況下,該功能正常工作府适。NumPy連接是沿著軸0連接這些數(shù)組。問題是在1-d數(shù)組中檐春,軸0不像在2維數(shù)組中那樣指向“向下”。

示例:連接1-D陣列時的報錯疟暖,AXIS = 1
np.concatenate([np_array_1s_1dim, np_array_9s_1dim], axis = 1)

IndexError: axis 1 out of bounds [0, 1)

一位數(shù)組只有一個軸。

總結(jié):

  • 將NumPy軸視為我們可以執(zhí)行操作的方向俐巴。
  • 將NumPy軸視為我們可以執(zhí)行操作的方向。
  • 將NumPy軸視為我們可以執(zhí)行操作的方向擎鸠。
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末邻遏,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子准验,更是在濱河造成了極大的恐慌,老刑警劉巖糊饱,帶你破解...
    沈念sama閱讀 217,277評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異滞项,居然都是意外死亡,警方通過查閱死者的電腦和手機文判,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,689評論 3 393
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來疚宇,“玉大人赏殃,你說我怎么就攤上這事敷待∪嗜龋” “怎么了榜揖?”我有些...
    開封第一講書人閱讀 163,624評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長抗蠢。 經(jīng)常有香客問我举哟,道長,這世上最難降的妖魔是什么物蝙? 我笑而不...
    開封第一講書人閱讀 58,356評論 1 293
  • 正文 為了忘掉前任炎滞,我火速辦了婚禮,結(jié)果婚禮上诬乞,老公的妹妹穿的比我還像新娘。我一直安慰自己钠导,他們只是感情好震嫉,可當(dāng)我...
    茶點故事閱讀 67,402評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著牡属,像睡著了一般票堵。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上逮栅,一...
    開封第一講書人閱讀 51,292評論 1 301
  • 那天悴势,我揣著相機與錄音,去河邊找鬼措伐。 笑死,一個胖子當(dāng)著我的面吹牛侥加,可吹牛的內(nèi)容都是我干的捧存。 我是一名探鬼主播,決...
    沈念sama閱讀 40,135評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼昔穴!你這毒婦竟也來了镰官?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,992評論 0 275
  • 序言:老撾萬榮一對情侶失蹤吗货,失蹤者是張志新(化名)和其女友劉穎泳唠,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體宙搬,經(jīng)...
    沈念sama閱讀 45,429評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡警检,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,636評論 3 334
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了害淤。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片扇雕。...
    茶點故事閱讀 39,785評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖窥摄,靈堂內(nèi)的尸體忽然破棺而出镶奉,到底是詐尸還是另有隱情,我是刑警寧澤崭放,帶...
    沈念sama閱讀 35,492評論 5 345
  • 正文 年R本政府宣布哨苛,位于F島的核電站,受9級特大地震影響币砂,放射性物質(zhì)發(fā)生泄漏建峭。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,092評論 3 328
  • 文/蒙蒙 一决摧、第九天 我趴在偏房一處隱蔽的房頂上張望亿蒸。 院中可真熱鬧,春花似錦掌桩、人聲如沸边锁。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,723評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽茅坛。三九已至,卻和暖如春则拷,著一層夾襖步出監(jiān)牢的瞬間贡蓖,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,858評論 1 269
  • 我被黑心中介騙來泰國打工煌茬, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留斥铺,地道東北人。 一個月前我還...
    沈念sama閱讀 47,891評論 2 370
  • 正文 我出身青樓宣旱,卻偏偏與公主長得像仅父,于是被迫代替她去往敵國和親叛薯。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,713評論 2 354

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

  • 基礎(chǔ)篇NumPy的主要對象是同種元素的多維數(shù)組笙纤。這是一個所有的元素都是一種類型耗溜、通過一個正整數(shù)元組索引的元素表格(...
    oyan99閱讀 5,124評論 0 18
  • NumPy是Python中關(guān)于科學(xué)計算的一個類庫,在這里簡單介紹一下省容。 來源:https://docs.scipy...
    灰太狼_black閱讀 1,228評論 0 5
  • 先決條件 在閱讀這個教程之前抖拴,你多少需要知道點python。如果你想從新回憶下腥椒,請看看Python Tutoria...
    舒map閱讀 2,577評論 1 13
  • 一阿宅、numpy概述 numpy(Numerical Python)提供了python對多維數(shù)組對象的支持:ndar...
    L_steven的貓閱讀 3,463評論 1 24
  • 前言 numpy是支持 Python語言的數(shù)值計算擴充庫,其擁有強大的高維度數(shù)組處理與矩陣運算能力笼蛛。除此之外洒放,nu...
    TensorFlow開發(fā)者閱讀 3,212評論 0 35