一維陣列很簡單,基本和列表一致。
它們的區別在於陣列切片是原始陣列檢視。(這就意味著,如果做任何修改,原始都會跟著修改。)
這也意味著,如果不想更改原始陣列,我們需要進行顯式的複製,從而得到它的副本。(.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...