摘要:一一維數組的索引與切片對象的內容可以通過索引或切片來訪問和修改,與中的切片操作一樣。在指定位置分裂數組本身作為一個參數,分類位置構成的列表作為第二個參數同時也可以對一維數組和多位數組進行操作。
1.概述
今天我們來講一下Numpy數組的索引與切片,numpy數組的索引與切片和Python中的切片與索引的作用相同,可以快速的取出數據,進行下一步的運用或者查看,但是兩種切片還有一些不同的地方。另外我們可以通過數組的變形拼接分裂快速的對數組進行做出改變,方便我們更快的對數組進行操作。
一、一維數組的索引與切片
ndarray對象的內容可以通過索引或切片來訪問和修改,與 Python 中 list 的切片操作一樣。
ndarray 數組可以基于 0 - n 的下標進行索引,切片對象可以通過內置的 slice 函數,并設置 start, stop 及 step 參數進行,從原數組中切割出一個新數組。
索引方式:
X[index_value]
切片方式:
X[start:stop:step]
首先創建一個數組
對數組進行索引,找到索引為2和6的元素
對數組進切片,查找從2開始到8結束,步長為2的元素。
需要注意的是,切片的結果會產生新的內存地址,如果要引用切片值,需要賦值給新的變量。
二、高維數組索引&切片
與Python原生的列表、元組不同的是,Numpy數組支持多維數組的多維索引,每一個逗號, 代表索引的一個維度
索引方法:
x[維度,行,列]
x維度[列]
二維和一維數組可以不指定維度
切片方法:
x[維度的[start:stop:step],行的[start:stop:step],列的[start:stop:step]]
可以不指定步長,會默認為1
首先設置兩個多維數組
1、索引
1.1索引出x1中第1行第1列的元素
1.2 索引出x2中第1個維度的第1行第1列的元素
2、切片
設置一個5維5行5列的np數組
2.1 切片出第二個維度中的第三行數據
2.2 切片出第三個維度中的第二行的第三個元素
2.3 切片出第二個維度中的第一行和第三行的第四個元素
切片出前兩個維度的第一行和第三行的前兩列
三、修改元素值
1、修改某一個元素
1.1設置一個數組
1.2轉換數據類型為浮點型
1.3將f1中的第三個元素改為3.14
2、修改數組中的多個元素
2.1將x3的前三個模塊的第3行的第4列的元素改為2333
四、其它索引方式
1、整數索引
如果一個 ndarray 是非元組序列,數據類型為整數或布爾值的 ndarray,或者至少一個元素為序列對象的元組,我們就能夠用它來索引 ndarray。高級索引始終返回數據的副本。與此相反,切片只提供了一個視圖。
整數索引就是兩種高級索引的類型之一,另一個高級索引方式為 布爾值索引。
整數索引有助于基于 N 維索引來獲取數組中任意元素。每個整數數組表示該維度的下標值。當索引的元素個數就是目標 ndarray 的維度時,會變得相當直接。以下示例獲取了 ndarray 對象中每一行指定列的一個元素。因此,行索引包含所有行號,列索引指定要選擇的元素。
該結果包括數組中 (0,0) ,(1,1) 和 (2,0) 位置處的元素。
但如果需要的是按數字對行列同時進行索引的而不是索引單個值的話,應當使用下面的方式:
也可以利用數字索引生成同樣維度的數組:
2.布爾索引
當結果對象是布爾運算(例如比較運算符)的結果時,將使用此類型的高級索引。
2.1設置一個4行3列的數組
2.2查看數組中大于5的元素
2.3 將數組中大于5的元素索引出來
五、關于視圖
關于數組切片有一點很重要也非常有用,那就是數組切片返回的是數組數據的視圖,而不是數值數據的副本。這一點也是 NumPy 數 組切片和 Python 列表切片的不同之處:在 Python 列表中,切片是值的副本。
對于切片出來的視圖或視圖中索引出來的元素(其實也是一個視圖)進行修改時,原始數據也會被改變。因此我們想要保護原始數據,應該先創建副本,在副本上進行操作,以保證原始數據不被修改。
六、數組的變形拼接分裂
1、數組的變形
1.1 np.reshape()不改變數據的條件下修改形狀
示例:將一個一維數組變成3*4數組
需要注意的是:變換形狀之后的數組大小必須和原始數組相同
Xx1的數組的長度為10,無法變形為3行4列的數組,這時候就會報錯,reshape()還有一個功能,就是幫我們回去行向量和列變量。
在使用reshape()的時候,可以將其中一個維度指定為-1,這樣numpy就會自動計算出它的真實值。
1.2 np.newaxis 和reshape()方法獲取行向量和列向量功能一樣,np.newaxis方法也可以幫我們獲取行向量與列向量
行向量:
列向量
Np.newaxis()比np.reshape()更高級的是:np.newaxis是和索引切片方法一起使用的,可以制定獲取行列向量的長度,即先切片在轉換成行向量或列向量
2、數組的拼接
當我們需要對多個數組進行操作時,這時候就需要拼接數組了,numpy提供了對數組進行拼接的方法
2.1 np.concatanate()
數組本身構成的列表作為np.concatenate()的參數之一,還有一個常用的參數是axis,用來指定拼接的方向:
axis = 0 按行拼接
axis = 1 按列拼接
默認的參數為axis = 0
按行拼接(橫向拼接)
按列拼接(縱向拼接)
2.2np.vstack()
垂直棧拼接,按行拼接,數組本身構成的列表作為np.vstack()的參數
2.3 np.hstack()
平行棧,按列拼接,數組本身構成的列表作為np.hstack()的參數
2.4 np.dstack()
第三維度拼接,數組本身構成的列表作為np.dstack()的參數
3、數組的分裂
同數組的拼接一樣,在處理多個數組時,也需要將數組進行分裂,numpy同時也提供了數組分裂的方法。
3.1 np.split()
在指定位置分裂,數組本身作為一個參數,分類位置構成的列表作為第二個參數,同時split也可以對一維數組和多位數組進行操作。
一維數組/行向量/列向量
多維數組
3.2 np.hsplit()
按列在指定位置分裂
3.3 np.vsplit()
按行在指定位置分裂
4.數組的平鋪
數據可以通過np.ravel()方法將多維的數組平鋪成一維的數組。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/43607.html
摘要:發生這個異常的原因就是因為在調用函數時,中的已經不再指向對象而是指向了全局對象,由于下并沒有屬性,所以輸出。在為綁定的上下文環境之后,并不會立即執行。方法用于檢查數組中的是否存在符合條件的項,存在則返回否則返回。 寫作意圖 這篇文章用于總結一些javascript語言中常見的易混淆點。 call | apply | bind 在js中,最詭異莫測的莫過于this了,理解的不夠深入或是應...
目錄Numpy簡介Numpy操作集合1、不同維度數據的表示1.1 一維數據的表示1.2 二維數據的表示1.3 三維數據的表示2、 為什么要使用Numpy2.1、Numpy的ndarray具有廣播功能2.2 Numpy數組的性能比Python原生數據類型高3 ndarray的屬性和基本操作3.1 ndarray的基本屬性3.2 ndarray元素類型3.3 創建ndarray的方式3.4 ndarr...
摘要:有三種可用的索引字段訪問,基本切片,高級索引。基本切片和索引基本切片將的切片基本概念擴展到維。基本切片生成的所有數組始終是原始數組的視圖。序列切片的標準規則適用于基于每維的基本切片包括使用步驟索引。因此,在基本切片下的行為。 https://docs.scipy.org/doc/nu... 索引 ndarrays可以使用標準Python x[obj]語法對其進行索引 ,其中x是數組,o...
摘要:注意和標準庫類并不相同,后者只處理一維數組和提供少量功能。然而,指定參數你可以吧運算應用到數組指定的軸上通用函數提供常見的數學函數如和。在中,這些叫作通用函數。函數,另一方面,將一維數組以行組合成二維數組。 原文:Quickstart tutorial 譯者:Reverland 來源:試驗性NumPy教程(譯) 2.1 先決條件 在閱讀這個教程之前,你多少需要知道點python。如...
摘要:第行把具名元組以的形式返回。對序列使用和通常號兩側的序列由相同類型的數據所構成當然不同類型的也可以相加,返回一個新序列。從上面的結果可以看出,它雖拋出了異常,但仍完成了操作查看字節碼并不難,而且它對我們了解代碼背后的運行機制很有幫助。 《流暢的Python》筆記。接下來的三篇都是關于Python的數據結構,本篇主要是Python中的各序列類型 1. 內置序列類型概覽 Python標準庫...
閱讀 2224·2021-11-22 09:34
閱讀 1334·2021-10-11 10:59
閱讀 4427·2021-09-22 15:56
閱讀 3270·2021-09-22 15:08
閱讀 3401·2019-08-30 14:01
閱讀 773·2019-08-30 11:16
閱讀 1129·2019-08-26 13:51
閱讀 2906·2019-08-26 13:43