一、索引
1.1、單值索引
import numpy as np
a = np.arange(16).reshape(2,2,4)
print("原數組:\n",a)
print("單值索引值:\n",a[1][1][2])
>>>
原數組:
[[[ 0 1 2 3]
[ 4 5 6 7]]
[[ 8 9 10 11]
[12 13 14 15]]]
單值索引值:
14
1.2、花式索引
- 可以通過數組,數組中寫明元素位置,來索引出多個需要的元素
import numpy as np
a=np.arange(25).reshape(5,5)#定義一個5*5的二維數組
print("原數組:\n",a)
print("花式索引多值(外層取行值):\n",a[[3, 3, 1, 4]])#注意這里一定傳入的是數組格式
print("花式索引多值(二次取值,先行后列):\n",a[[0,2,2,4],[0,2,4,4]])#注意這里一定傳入的是數組格式
>>>
原數組:
[[ 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]]
花式索引多值(外層取行值):
[[15 16 17 18 19]
[15 16 17 18 19]
[ 5 6 7 8 9]
[20 21 22 23 24]]
花式索引多值(外層取行值):
[ 0 12 14 24]
1.3、布爾索引
- 可以通過設置篩選條件生成布爾數組,在通過布爾數組反向索引出符合條件的結果
import numpy as np
a=np.random.random((4,4))#生成4×4的二維數組
b=a>0.5#生成以a>0.5為篩選條件的布爾數組
print(b)
print(a[b])#根據布爾數組將原值取出,變成一維數組
>>>
[[ True True False False]
[ True True True False]
[ True True True True]
[ True False True False]]
[0.72159895 0.85017348 0.88332226 0.7494597 0.8514071 0.91133411 0.89253366 0.80979503 0.61827433 0.94660476 0.67418788]
1.4、索引器ix_()
- 與花式索引相比,ix_()可以以軸為單位進行遍歷,而非花式索引中的單點遍歷
import numpy as np
a=np.arange(24).reshape(4,6)#生成4×4的二維數組
b=a[[1,3],[3,5]]#花式索引
c=a[np.ix_([1,3],[3,5])]#索引器
d=a[[1,3]][:,[3,5]]
print("原數組:\n",a)
print("花式索引:\n",b)
print("索引器索引:\n",c)
print("c等值於d:\n",d)
>>>
原數組:
[[ 0 1 2 3 4 5]
[ 6 7 8 9 10 11]
[12 13 14 15 16 17]
[18 19 20 21 22 23]]
花式索引:
[ 9 23]
索引器索引:
[[ 9 11]
[21 23]]
c等值於d:
[[ 9 11]
[21 23]]
二、切片
- numpy切片方式與python默認方式一致
- 切片下來的內容與原數組共享同一片內存空間
import numpy as np
a = np.arange(16).reshape(2,2,4)
print("原數組:\n",a)
print("取一個值:\n",a[1][1][2])
print("切片范圍取值:\n",a[1][1][2:4])
print("更大范圍的切片遍歷::\n",a[0][:][0:4])
>>>
原數組:
[[[ 0 1 2 3]
[ 4 5 6 7]]
[[ 8 9 10 11]
[12 13 14 15]]]
取一個值:
14
切片范圍取值:
[14 15]
更大范圍的切片遍歷:
[[0 1 2 3] [4 5 6 7]]

三、元素修改