机器学习和数据分析-numpy的比较运算

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]])

运行效果图如下:

  

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值