搞清axis的含義,這一篇就夠了!

文章目錄

  • axis的含義
  • 旁門左道式理解
    • 二維數組中的axis
    • 三維數組中的axis
  • 正規理解


axis的含義

在自己分析之前先擺上官方關于多維數組中axis的值的定義:

axis = 0,表示第一個維度

axis = 1,表示第二個維度

axis = -1,表示最后一個維度 【二維數組里axis=1和axis=-1等價】

以下先分析二維數組里axis=1和axis=0的區別,再分析三維數組里axis=-1,0,1的區別

PS:可以嘗試先看看正規理解,如果能理解就不用看旁門左道式理解了~


旁門左道式理解

二維數組中的axis

我們先了解一下關于axis的一些知識~

axis用來為超過一維的數組定義屬性。二維數據擁有兩個軸:第0軸沿著行的方向垂直向下,第1軸沿著列的方向水平延申。1表示橫軸,方向從左到右;0表示縱軸,方向從上到下。當axis=1時,數組的變化是橫向的,體現出列的增加或者減少。反之,當axis=0時,數組的變化是縱向的,體現出行的增加或減少。

結合例子來看:

在這里插入圖片描述

在這里插入圖片描述
根據第二張圖我們來理解axis,簡單來講,0軸沿著行的方向垂直向下豎著加,1軸沿著列的方向水平延申橫著加


三維數組中的axis

摸著良心講二維數組中axis真的是很好理解,三維數組中axis難以理解的地方在于,三維數組的[]太多了!所以在理解的時候很容易懵。話不多說,進入正題~

先看一組例子:

a = np.array([[[0, 1, 44], [3, 4, 25], [6, 7, 88]],[[9, 50, 11], [12, 73, 14], [15, 66, 17]],[[78, 19, 20], [91, 22, 23], [84, 25, 26]]])
print("a=", a)
b = np.max(a, axis=0)
print("b=", b)

運行結果:

a= [[[ 0  1 44][ 3  4 25][ 6  7 88]][[ 9 50 11][12 73 14][15 66 17]][[78 19 20][91 22 23][84 25 26]]]
b= [[78 50 44][91 73 25][84 66 88]]

把a = np.max(b, axis=0) 改成a = np.max(b, axis=1),則運行結果如下:

a= [[[ 0  1 44][ 3  4 25][ 6  7 88]][[ 9 50 11][12 73 14][15 66 17]][[78 19 20][91 22 23][84 25 26]]]
b= [[ 6  7 88][15 73 17][91 25 26]]

把a = np.max(b, axis=0) 改成a = np.max(b, axis=-1),則運行結果如下:

a= [[[ 0  1 44][ 3  4 25][ 6  7 88]][[ 9 50 11][12 73 14][15 66 17]][[78 19 20][91 22 23][84 25 26]]]
b= [[44 25 88][50 73 66][78 91 84]]

用第一個維度、第二個維度、最后一個維度來理解axis是很抽象的,所以本文用去掉[]的方式來幫助大家理解axis

三維數組是這樣表示出來的
[[[]
[]
[]]

[[]
[]
[]]

[[]
[]
[]]]

而對數組進行操作是根據[]劃分的范圍來決定的

axis = 0,表示去掉[]之后進行max操作

去掉之后長這樣:

[[ 0  1 44][ 3  4 25][ 6  7 88]][[ 9 50 11][12 73 14][15 66 17]][[78 19 20][91 22 23][84 25 26]]

也就是把一個三維數組分成了三個二維數組,則在找出最大值時(執行max時),是將三個二維數組每個相同位置的元素進行比較,最終取三個之中最大的作為該位置的最終值
【0,9,78中取78,1,50,19中取50…以此類推】

b= [[78 50 44][91 73 25][84 66 88]]

axis = 1,表示去掉[]之后進行max操作

去掉之后長這樣:

[[ 0  1 44][ 3  4 25][ 6  7 88][ 9 50 11][12 73 14][15 66 17][78 19 20][91 22 23][84 25 26]]

也就變成了三個元素為一個“小組”的9個小組,從前三個小組每個相同位置的元素中選出最大值作為最終結果里第一行對應位置的最終值;從中間三個小組每個相同位置的元素中選出最大值作為最終結果里第二行對應位置的最終值;從后三個小組每個相同位置的元素中選出最大值作為最終結果里第三行對應位置的最終值。
【以中間三組為例:9,12,15中選取15賦值到第二行第一個位置;50,73,66中選取73第二行第二個位置;11,14,17中選取17第二行第三個位置】

b= [[ 6  7 88][15 73 17][91 25 26]]

axis = -1,表示去掉[]之后進行max操作

去掉之后長這樣:

[[ 0  1 443  4 256  7 88][ 9 50 1112 73 1415 66 17][78 19 2091 22 2384 25 26]]

可以看出每個元素現在已經“各自為戰”了,不同于之前的各個二維數組相同位置的元素每個小組相同位置的元素;他們只能以元素的身份和別的元素去比較。

第一行的元素比較結果作為第一行第一列的最終值,第二行的元素比較結果作為第一行第二列的最終值……第四行的元素比較結果作為第二行第一列的最終值……以此類推。

【78,19,20中取78賦值到第三行第一個位置,91,22,23中取91賦值到第三行第二個位置,84,25,26中取84賦值到第三行第三個位置】

b= [[44 25 88][50 73 66][78 91 84]]

正規理解

其實用維度理解挺好理解的

如果用x,y,z表示三維數組的三個維度

axis = 0時,確定最終二維數組的yi,zi時,也就是(x0,yi,zi)、(x1,yi,zi)、(x2,yi,zi)三個點的值作比較,取最大的放到(yi,zi)。

【確定(y1,z1)時,比較(x0,y1,z1)=4、(x1,y1,z1)=73、(x2,y1,z1)=22】

a= [[[ 0  1 44][ 3  4 25][ 6  7 88]][[ 9 50 11][12 73 14][15 66 17]][[78 19 20][91 22 23][84 25 26]]]
b= [[78 50 44][91 73 25][84 66 88]]

axis = 1時,確定最終二維數組的xi,zi時,也就是(xi,y0,zi)、(xi,y1,zi)、(xi,y2,zi)三個點的值作比較,取最大的放到(xi,zi)。

【確定(x1,z1)時,比較(x1,y0,z1)=50、(x1,y1,z1)=73、(x1,y2,z1)=66】

a= [[[ 0  1 44][ 3  4 25][ 6  7 88]][[ 9 50 11][12 73 14][15 66 17]][[78 19 20][91 22 23][84 25 26]]]
b= [[ 6  7 88][15 73 17][91 25 26]]

axis = -1時,確定最終二維數組的xi,yi時,也就是(xi,yi,z0)、(xi,yi,z1)、(xi,yi,z2)三個點的值作比較,取最大的放到(xi,yi)。

【確定(x1,y1)時,比較(x1,y1,z0)=12、(x1,y1,z1)=73、(x1,y1,z2)=14】

a= [[[ 0  1 44][ 3  4 25][ 6  7 88]][[ 9 50 11][12 73 14][15 66 17]][[78 19 20][91 22 23][84 25 26]]]
b= [[44 25 88][50 73 66][78 91 84]]

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/443868.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/443868.shtml
英文地址,請注明出處:http://en.pswp.cn/news/443868.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

百戰c++(12)

36. 定義 int **a[3][4], 則變量占有的內存空間為:_____ 37. 編寫一個函數,要求輸入年月日時分秒,輸出該年月日時分秒的下一秒。如輸入2004年12月31日23時59分59秒,則輸出2005年1月1日0時0分0秒。 38.寫一個函數,判…

Struts2.3.5+Hibernate3+Spring3.1基于注解實現的多文件上傳,下載

Struts2.3.5Hibernate3Spring3.1基于注解實現的的多文件上傳,下載,這里是上傳文件到數據庫中,上傳控件可以增加和刪除,有需要的朋友可以看看。 以下是源碼下載地址:http://www.zuidaima.com/share/1639672872438784.htm jar包的下…

Pandas索引操作及高級索引——reindex()方法

文章目錄索引對象多個數據結構之間共享index類對象is與的區別重置索引——reindex()索引操作Series的索引操作切片不連續索引布爾型索引DataFrame的索引操作獲取不連續的Series對象切片Pandas庫中的操作索引方法索引對象 Index類對象,該對象不可以進行修改&#xf…

【精品計劃1】動態規劃入門到熟悉,看不懂來打我啊

持續更新。。。。。。 2.1斐波那契系列問題 2.2矩陣系列問題 2.3跳躍系列問題 3.1 01背包 3.2 完全背包 3.3多重背包 3.4 一些變形選講 2.1斐波那契系列問題 在數學上,斐波納契數列以如下被以遞歸的方法定義:F(0)0,F(1)1, F(n)F(n-1)…

Pandas數據排序——【按索引排序sort_index()方法、按值排序sort_value()方法】

文章目錄按索引排序——sort_index()對Series排序對DataFrame排序按值排序——sort_value()對Series進行排序對DataFrame進行排序按索引排序——sort_index() sort_index(axis0, levelNone, ascendingTrue, inplaceFalse, kind‘quicksort’, na_position‘last’,sort_remaini…

【大總結2】大學兩年,寫了這篇幾十萬字的干貨總結

本文是我大學兩年知識的總結。涵蓋數據結構、算法、語言基礎、操作系統、關系數據庫、NOSQL、網絡/前端/項目基礎知識、安全和測試、框架的學習、中間件和工具、設計模式和框架原理、我推薦的資料、我的建議 本篇文章應該算是Java后端開發技術棧的,但是大部分是基礎…

Pandas對象的層次化索引——【from_tuples()、from_arrays()、from_product()、swaplevel()、sort_index()、sort_values()】

文章目錄層次化索引的概念層次化索引的創建使用嵌套列表的方式構造層次化索引對象Series對象DataFrame對象通過MultiIndex類的方法構建層次化索引通過from_tuples()方法創建MultiIndex對象通過from_arrays()方法創建MultiIndex對象通過from_product()方法創建MultiIndex對象層次…

《這是全網最硬核redis總結,誰贊成,誰反對?》六萬字大合集

我攤牌了,這篇文章,值得99%的人收藏 此文后續會改為粉絲可見,所以喜歡的請提前關注和收藏,不迷路。 最近有五本我喜歡的redis實體新書,想要的去評論,我寫個隨機數抽獎包郵送給你。 那么,準備好…

Python數據預處理之異常值的處理——【自定義的three_sigma()函數、boxplot()方法】

文章目錄基于3σ原則檢測異常值代碼實現測試基于箱型圖檢測異常值異常值的處理基于3σ原則檢測異常值 3σ原則,又稱拉依達準則。是指假設一組檢測數據只含有隨機誤差。對其進行計算處理得到標準偏差,按一定概率確定一個區間,凡是超過這個區間…

那個谷歌的網紅扔雞蛋的題,來看看教科書式的回答

leetcode頂級難題,谷歌面試天天問,來看看吧,帶你來一步一步達到最優解。 谷歌不知道問了多少遍,藍橋杯也出現過,leetcode上是頂級難題,到底是什么題能如此頻繁地出現?我們一探究竟吧。 原題描述…

Python更改數據類型——astype()方法和to_numeric()函數

文章目錄明確指定數據的類型通過dtypes屬性進行查看創建Pandas對象指定數據類型轉換數據類型通過astype()方法強制轉換數據的類型通過to_numeric()函數轉換數據類型明確指定數據的類型 通過dtypes屬性進行查看 import pandas as pddf pd.DataFrame({A: [1, 2, 4],B: [9, -80…

不騙你,沒讀這一篇,你不可能懂二分

上篇文章講動態規劃獲得了80k瀏覽,這次的二分也值得你們一看,這個系列是特別用心寫的,準備出書的哦 動態規劃 3.0 引子 圖書館自習的時候,一女生背著一堆書進閱覽室,結果警報響了,大媽讓女生看是哪本書把警報弄響了,女生把書倒出…

Python之數據合并——【concat()函數、merge()函數、join()方法、combine_first()方法】

文章目錄軸向堆疊數據——concat()函數橫向堆疊與外連接縱向堆疊與內連接主鍵合并數據——merge()函數內連接方式外連接方式左連接方式右連接方式其他根據行索引合并數據——join()方法四種連接方式行索引與列索引重疊合并重疊數據——combine_first()方法軸向堆疊數據——conc…

超硬核!操作系統學霸筆記,考試復習面試全靠它

之后會發布基于基礎知識的大部分算法的模擬代碼合集,敬請關注。 進程基礎 進程的基本概念 程序順序執行的特征: 1)順序性:處理機嚴格按照程序所規定的順序執行,每一步操作必須在下一步操作開始前執行 2)封…

配置tomcat6.0的HTTPS(單向)

利用JDK自帶的產生證書的工具 生成證書 建立一個腳本文件,內容如下: set SERVER_DN"CNServer, OUshare, Oshare, Lsz, Sgd, CCN" set CLIENT_DN"CNClient, OUshare, Oshare, Lsz, Sgd, CCN" set KS_PASS-storepass changeit set KE…

Python之數據重塑——【stack()方法和unstack()方法、pivot()方法】

文章目錄重塑層次化索引對于單層索引的DataFrame類對象stack()方法unstack()方法對于多層索引的DataFrame類對象辨析操作內層索引與外層索引的區別查看多層索引對象轉換后的類型軸向旋轉——pivot()方法重塑層次化索引 Pandas中重塑層次化索引的操作主要是stack()方法和unstac…

超硬核!學霸把操作系統經典算法給敲完了!要知行合一

上期的筆記,瀏覽快1萬了,既然關注的人很多,那就發出來承諾過的算法全模擬,希望幫到你們。 上期的操作系統學霸筆記,考試復習面試全靠它 一、模擬進程調度 功能 data.h #ifndef _Data_h_ #define _Data_h_#include …

Python之數據轉換——【rename()方法、cut()函數、get_dummies()函數】

文章目錄重命名軸索引離散化連續數據啞變量處理類別型數據重命名軸索引 rename( self, mapper: Optional[Renamer] None, *, index: Optional[Renamer] None, columns: Optional[Renamer] None, axis: Optional[Axis] None, copy: bool True, inplace: bool False, level…

超硬核!數據結構學霸筆記,考試面試吹牛就靠它

上次發操作系統筆記,很快瀏覽上萬,這次數據結構比上次硬核的多哦,同樣的會發超硬核代碼,關注吧。 超硬核!操作系統學霸筆記,考試復習面試全靠它 第一次筆記(復習c,課程概述&#xff…

Python之數據拆分——groupby()方法

文章目錄groupby()方法通過列名進行分組通過Series對象進行分組Series對象與原數據的行索引長度相等Series對象與原數據的行索引長度不等通過字典進行分組按照columns軸的方向進行分組按照index軸的方向進行分組通過函數進行分組groupby()方法 groupby( self, byNone, axis0, l…