索引和切片
一維數組
一維數組很簡單,基本和列表一致。
它們的區別在于數組切片是原始數組視圖(這就意味著,如果做任何修改,原始都會跟著更改)。
這也意味著,如果不想更改原始數組,我們需要進行顯式的復制,從而得到它的副本(.copy())。
import numpy as np #導入numpyarr = np.arange(10) #類似于list的range()arrOut[3]: array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])arr[4] #索引(注意是從0開始的)Out[4]: 4arr[3:6] #切片Out[6]: array([3, 4, 5])arr_old = arr.copy() #先復制一個副本arr_oldOut[8]: array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])arr[3:6] = 33arr #可以發現將標量賦值給一個切片時,該值可以傳播到整個選區Out[10]: array([ 0, 1, 2, 33, 33, 33, 6, 7, 8, 9])arr_oldOut[11]: array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
二維數組
二維數組中,各索引位置上的元素不再是標量,而是一維數組(好像很難理解哈)。
arr1 = np.array([[1, 2, 3],[4, 5, 6],[7, 8, 9]])arr1[0]Out[13]: array([1, 2, 3])arr1[1,2]Out[14]: 6
好像很難理解,是吧。
那這樣看:
array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
想到了什么?咱們當做一個平面直角坐標系。

相當于arr1[x,y],x相當于行數,y相當于列數(必須聲明,圖中x和y標反了,但不影響理解)。
多維數組
先說明下reshape()更改形狀:
np.reshape(a,newshape,order='C')
a:array_like以一個數組為參數。
newshape:intortupleofints。整數或者元組
順便說明下,np.reshape()不更改原數組形狀(會生成一個副本)。
arr1 = np.arange(12)arr2 = arr1.reshape(2,2,3) #將arr1變為2×2×3數組arr2Out[9]: array([[[ 0, 1, 2], [ 3, 4, 5]], [[ 6, 7, 8], [ 9, 10, 11]]])
其實多維數組就相當于:
row * col * 列中列

那么:
arr2[0]Out[10]: array([[0, 1, 2], [3, 4, 5]])arr2[1]Out[11]: array([[ 6, 7, 8], [ 9, 10, 11]])arr2[0,1]Out[12]: array([3, 4, 5])arr2[0] = 23 #賦值arr2Out[15]: array([[[23, 23, 23], [23, 23, 23]], [[ 6, 7, 8], [ 9, 10, 11]]])
切片索引
那么這樣也就很容易的就可以理解下面這種索引了。
切片索引把每一行每一列當做一個列表就可以很容易的理解。
返回的都是數組。
再復雜一點:
我們想要獲得下面這個數組第一行的第2,3個數值。
arr1 = np.arange(36)#創建一個一維數組。arr2 = arr1.reshape(6,6) #更改數組形狀。Out[20]: array([[ 0, 1, 2, 3, 4, 5], [ 6, 7, 8, 9, 10, 11], [12, 13, 14, 15, 16, 17], [18, 19, 20, 21, 22, 23], [24, 25, 26, 27, 28, 29], [30, 31, 32, 33, 34, 35]])
新聞熱點
疑難解答