ndarray 对象的内容可以通过索引或切片来访问和修改 ,与python中list的切片操作一样
ndarry 数组可以基于0-n 的下标进行索引,切片对象可以通过内置的slice函数,并设置start,stop
及step参数进行 从原数组中切割出一个新数组
import numpy as np
arr = np.arange(10)
print(arr[1])
#从索引2开始到索引7 停止 间隔为2
s = slice(2,7,2)
print(arr)
print(arr[s])
1 [0 1 2 3 4 5 6 7 8 9] [2 4 6]
可以使用: 代替 slice
所示:
start:stop:step
切片还可以包括省略号... 来使选择元组的长度与数组的维度相同,如果在行位置使用省略号 它将返回包含行中元素的ndarry
import numpy as np
arr = np.array([[1,2,3],[4,5,6],[7,8,9],[10,11,12],[13,14,15]])
print(arr)
print("---------")
# 第二列元素
print(arr[...,1])
print("-------------")
#第二行元素
print(arr[1,...])
print(arr[...,1:])
[[ 1 2 3] [ 4 5 6] [ 7 8 9] [10 11 12] [13 14 15]] --------- [ 2 5 8 11 14] ------------- [4 5 6] [[ 2 3] [ 5 6] [ 8 9] [11 12] [14 15]]
高级索引
import numpy as np
arr = np.array([[1,2,3],[4,5,6],[7,8,9],[10,11,12]])
#0,0 1,1, 2,0
print(arr)
print(arr[[0,1,2],[0,1,0]])
rows = np.array([[0,0],[3,3]])
cols = np.array([[0,2],[0,2]])
print("\n")
print(arr[rows,cols])
[[ 1 2 3] [ 4 5 6] [ 7 8 9] [10 11 12]] [1 5 7] [[ 1 3] [10 12]]
布尔索引
布尔索引通过布尔运算(如:比较运算符)来获取符合指定条件的元素的数组
打印大于5 的元素
import numpy as np
arr = np.array([[0,1,2],[3,4,5],[6,7,8],[9,10,11]])
print(arr[arr>5])
[ 6 7 8 9 10 11]
使用 ~(取补运算符)来过滤NaN
import numpy as np
arr = np.array([[0,1,2],[3,4,5],[6,7,8],[9,10,11]])
print(arr[arr>5])
[1. 2. 3. 4. 5.]
arr = np.array([np.nan,1,2,np.nan,4,5,6])
print(arr)
print(arr[~np.isnan(arr)])
[nan 1. 2. nan 4. 5. 6.] [1. 2. 4. 5. 6.]