花式索引
切片
import numpy as np
# 切片
a = np.arange(10)
print("a:{}".format(a))
print("a[2:7:2]結(jié)果:{}".format(a[2:7:2]))
結(jié)果:
a:[0 1 2 3 4 5 6 7 8 9]
a[2:7:2]結(jié)果:[2 4 6]
解析:
1.索引范圍是2到7(不包含7)
image.png
2.切片步長是2
image.png
3.最終結(jié)果:
image.png
import numpy as np
# 切片
a = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
b = a[1:3, 0:2]
print("a:{}".format(a))
print("b:{}".format(b))
結(jié)果:
a:[[1 2 3]
[4 5 6]
[7 8 9]]
b:[[4 5]
[7 8]]
解析:
image.png
索引
import numpy as np
# 索引
a = np.arange(10, 20)
print("a:{}".format(a))
print("a[[1, 3, 6, 8]]結(jié)果:{}".format(a[[1, 3, 6, 8]]))
結(jié)果:
a:[10 11 12 13 14 15 16 17 18 19]
a[[1, 3, 6, 8]]結(jié)果:[11 13 16 18]
解析:
1.逐個索引取數(shù)據(jù)
image.png
2.最終結(jié)果:
image.png
高級索引
import numpy as np
# 高級索引
x = np.array([[1, 2], [3, 4], [5, 6]])
y = x[[0, 2, 0], [0, 1, 1]]
print("x:{}".format(x))
print("y:{}".format(y))
結(jié)果:
x:[[1 2]
[3 4]
[5 6]]
y:[1 6 2]
解析:
1.按照索引值定位子元素
image.png
2.在上一步的基礎(chǔ)上進一步定位
image.png
3.最終結(jié)果:
image.png
import numpy as np
# 高級索引
x = np.array([[0, 1, 2], [3, 4, 5], [6, 7, 8], [9, 10, 11]])
print('我們的數(shù)組x:')
print(x)
print('\n')
rows = [[0, 0], [3, 3]]
cols = [[0, 2], [0, 2]]
y = x[rows, cols]
print('這個數(shù)組的四個角元素是:')
print(y)
結(jié)果:
我們的數(shù)組x:
[[ 0 1 2]
[ 3 4 5]
[ 6 7 8]
[ 9 10 11]]
這個數(shù)組的四個角元素是:
[[ 0 2]
[ 9 11]]
1.按索引位逐個取值
image.png
2.最終結(jié)果:
image.png
廣播
import numpy as np
#廣播
a = np.array([[0, 0, 0],
[10, 10, 10],
[20, 20, 20],
[30, 30, 30]])
b = np.array([1, 2, 3])
print(a + b)
結(jié)果:
[[ 1 2 3]
[11 12 13]
[21 22 23]
[31 32 33]]
解析:
image.png
廣播的規(guī)則:
1.讓所有輸入數(shù)組都向其中形狀最長的數(shù)組看齊,形狀中不足的部分都通過在前面加 1 補齊梅猿。
2.輸出數(shù)組的形狀是輸入數(shù)組形狀的各個維度上的最大值砂轻。
3.如果輸入數(shù)組的某個維度和輸出數(shù)組的對應維度的長度相同或者其長度為 1 時械荷,這個數(shù)組能夠用來計算,否則出錯。
4.當輸入數(shù)組的某個維度的長度為 1 時,沿著此維度運算時都用此維度上的第一組值。
簡單理解:
對兩個數(shù)組铐望,分別比較他們的每一個維度(若其中一個數(shù)組沒有當前維度則忽略),滿足:
1.數(shù)組擁有相同形狀茂附。
2.當前維度的值相等正蛙。
3.當前維度的值有一個是 1。