1.启动jupyter notebook
2.创建一个新的notebook,并导入numpy
一:numpy的Fancy indexing
1.创建一个数组,可通过索引和切片进行取值
#1.定义一个数组x
x = np.array(list('ABCDEFG'))
x
#结果:array(['A', 'B', 'C', 'D', 'E', 'F', 'G'], dtype='<U1')
#2.取值
x[1]
#结果:'B'
x[1:5]
#结果:array(['B', 'C', 'D', 'E'], dtype='<U1')
x[1:5:2]
#结果:array(['B', 'D'], dtype='<U1')
运行效果图如下:
2.Faceindexing就是传递一个索引数组,可以一次性的得到多个元素
#1.直接取出单个元素组成列表
[x[1],x[2],x[3]]
#结果:['B', 'C', 'D']
#2.定义一个索引,通过索引取出值
ind = [1,2,4]
x[ind]
#结果:array(['B', 'C', 'E'], dtype='<U1')
运行效果图如下:
3.索引值为一个二维数组,取出的元素也是二维数组
#1.重新输出x
x
#结果:array(['A', 'B', 'C', 'D', 'E', 'F', 'G'], dtype='<U1')
#2.定义一个二维数组索引
ind = np.arange(1,5).reshape(2,-1)
ind
#结果:array([[1, 2],
# [3, 4]])
#3.取出索引对应的x的值
x[ind]
#结果:array([['B', 'C'],
# ['D', 'E']], dtype='<U1')
运行效果如下:
4.二维数组的索引取值
#1.定义一个二维数组
X = np.arange(16).reshape(4,-1)
X
#结果:array([[ 0, 1, 2, 3],
# [ 4, 5, 6, 7],
# [ 8, 9, 10, 11],
# [12, 13, 14, 15]])
#2.定义索引取值的行和列,并取出对应的值
row = [0,1,3]
col = [1,2,3]
X[row,col]
#结果:array([ 1, 6, 15])
#3.切片+索引
X[1,col]
#结果:array([5, 6, 7])
X[1:3,col]
#结果:array([[ 5, 6, 7],
# [ 9, 10, 11]])
#4.索引为布尔值,True取出,False则不取
col = [True,True,False,False]
X[1:3,col]
#结果:array([[4, 5],
# [8, 9]])
运行效果图如下:
二:比较运算
1.x<5,则得到一组布尔向量,然后把它作为索引就会取出相应的值,比如x[x<5],其中x<5可以是其他比较复杂的运算,比如:x-1!=x//2+3
#1.定义一个数组x
x = np.arange(10)
x
#结果:array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
#2.比较x<5,得到一组布尔值
x<5
#结果:array([ True, True, True, True, True, False, False, False, False,False])
#3.取出对应的值
x[x<5]
#结果:array([0, 1, 2, 3, 4])
#4.定义一个复杂的公式
x-1 != x // 2
#结果:array([ True, False, False, True, True, True, True, True, True, True])
#5.定义一个公式,并取出对应的值
x+2 == x//2 + 3
#结果:array([False, True, True, False, False, False, False, False, False,False])
x[x+2 == x//2 + 3]
#结果:array([1, 2])
运行效果图如下:
2.二维数组比较,运行效果图如下:
3.比较和复合运算一起使用,比如np. sum(x<8),求出小于8的个数
#1.让x+2重新输出x
x = x+2
x
#结果:array([ 2, 3, 4, 5, 6, 7, 8, 9, 10, 11])
#2.计算x中小于8的个数
np.sum(x<8)
#结果:6
#3.计算x小于8且不为0的个数
np.count_nonzero(x<8)
#结果:6
运行效果图如下:
4.np. any(x<2)有一个满足,np. all(x>=2)所有都满足,返回一个布尔值
#1.重新输出x
x
#结果:array([ 2, 3, 4, 5, 6, 7, 8, 9, 10, 11])
#2.判断是否至少有一个数小于2,返回一个布尔值
np.any(x<2)
#结果:False
#3.判断是否至少有一个数小于等于2,返回一个布尔值
np.any(x<=2)
#结果:True
#4.判断所有值是否都大于2,返回一个布尔值
np.all(x>2)
#结果:False
#5.判断是所有值是否都大于等于2,返回一个布尔值
np.all(x>=2)
#结果:True
运行效果图如下:
5.二维数组的比较复合,np. sum(X%%2==0),统计出所有偶数个数;np. sum(X%%2==0,axis=0),统计出每一列的偶数个数
#1.重新输出二维数组X
X
#结果:array([[ 0, 1, 2, 3],
# [ 4, 5, 6, 7],
# [ 8, 9, 10, 11],
# [12, 13, 14, 15]])
#2.统计所有偶数的个数
np.sum(X % 2 == 0)
#结果:8
#3.统计每一列偶数的个数
np.sum(X % 2 == 0 ,axis=0)
#结果:array([4, 0, 4, 0])
运行效果图如下:
6.二维数组的与或非运算& | ~
#1.重新输出X
X
#结果:array([[ 0, 1, 2, 3],
# [ 4, 5, 6, 7],
# [ 8, 9, 10, 11],
# [12, 13, 14, 15]])
#2.统计X大于2且X小于10的个数
np.sum((X>2) & (X<10))
#结果:7
#3.取出X大于2且X小于10对应的值
X[(X>2) & (X<10)]
#结果:array([3, 4, 5, 6, 7, 8, 9])
#4.统计X等于2或者X等于10的个数
np.sum((X==2) | (X==10))
#结果:2
#5.统计X等于2取反的个数,就是X不等于2的个数
np.sum(~(X==2))
#结果:15
运行效果图如下:
获取最后一列能被3整除的数据(行)
#1.重新输出X
X
#结果:array([[ 0, 1, 2, 3],
# [ 4, 5, 6, 7],
# [ 8, 9, 10, 11],
# [12, 13, 14, 15]])
#2.取出最后一列数据
X[:,-1]
#结果:array([ 3, 7, 11, 15])
#3.判断最后一列数据,能被3整数的数
X[:,-1] %3 ==0
#结果:array([ True, False, False, True])
#4.将上面作为条件,取出满足该条件对应的行
X[X[:,-1] %3 ==0,:]
#结果:array([[ 0, 1, 2, 3],
# [12, 13, 14, 15]])
运行效果图如下: