numpy array索引和切片

2021-09-12 23:15:42 字數 3080 閱讀 8006

一維陣列很簡單,基本和列表一致。

它們的區別在於陣列切片是原始陣列檢視。(這就意味著,如果做任何修改,原始都會跟著修改。)

這也意味著,如果不想更改原始陣列,我們需要進行顯式的複製,從而得到它的副本。(.copy()

import numpy as np

arr = np.arange( 10)

arr

輸出:

array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
arr[4] # 索引(注意是從0開始的)
輸出:

4
arr[3:6]
輸出:

array([3, 4, 5])
arr_old = arr.copy()

arr_old

輸出:

array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
arr[3:6] = 33

arr

輸出:

array([ 0,  1,  2, 33, 33, 33,  6,  7,  8,  9])
arr_old
輸出:

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

先說下reshape()更改形狀:

np.reshape(a, newshape, order='c')
np.reshape()不更改原陣列形狀(會生成乙個副本)

arr1 = np.arange(12)

arr2 = arr1.reshape(2,2,3) #將arr1變為2×2×3陣列

arr2

out[9]:

array([[[ 0, 1, 2],

[ 3, 4, 5]],

[[ 6, 7, 8],

[ 9, 10, 11]]])

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 #賦值

arr2

out[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]])

為了得到第2,3個數, 我們可以:

arr2[0,2:4]

out[29]: array([2, 3])

我們還可以這樣:

arr2[1] #取得第2行

out[37]: array([ 6, 7, 8, 9, 10, 11])

arr2[:,3] #取得第3列, 只有:代表選取整列(也就是整個軸)

out[38]: array([ 3, 9, 15, 21, 27, 33])

arr2[1:4,2:4] # 取得乙個二維陣列

out[40]:

array([[ 8, 9],

[14, 15],

[20, 21]])

arr2[::2,::2] #設定步長為2

out[41]:

array([[ 0, 2, 4],

[12, 14, 16],

[24, 26, 28]])

arr3 = arr2.reshape(4,3,3)

arr3[2:,:1] = 22 #對切片表示式賦值

arr3

out[25]:

array([[[ 0, 1, 2],

[ 3, 4, 5],

[ 6, 7, 8]],

[[ 9, 10, 11],

[12, 13, 14],

[15, 16, 17]],

[[22, 22, 22],

[21, 22, 23],

[24, 25, 26]],

[[22, 22, 22],

[30, 31, 32],

[33, 34, 35]]])

reference:

numpy 索引和切片

一 取行 1 單行 陣列 index,取第index 1行 例子import numpy as np arr1 np.arange 0,24 reshape 4,6 取第2行資料 row1 arr1 1,print row1 2 連續的多行 陣列 start end 顧頭不顧尾,也可以使用步長,不過...

NumPy 切片和索引

import numpy asnp a np.arange 10,20,1 b slice 1,5,2 d a 1 5 2 e a 2 print a print a b print d print e 結果 1011 1213 1415 1617 1819 1113 1113 1213 1415 ...

3 索引和切片

1 基本索引 索引查詢方式單一 1 a tf.ones 1,5,5,3 2print a 0 0 3print a 0 0 0 4print a 0 0 0 2 輸出 tf.tensor 1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.shape 5,3 dtype float32 tf...