第六章 索引和切片

一 数组索引机制

#

1.基础索引

"""
一维数组的索引
1.可正可负  左开右闭  一正一负
2.和String的索引有点像

"""
        np01 = np.arange(10)#[0,1,2,3,4,5,6,7,8,9]
        print(np01[4])#索引是4的数据
        print(np01[0:4])
        print(np01[-7:-1])
        print(np01[7:-1])
        print(np01[0:4:2])

"""

2.高级索引

"""
一维数组的高级索引
直接那数组定义需要具体到那个数据
"""

        np01 = np.arange(20)
        print("源数组为")
        print(np01)
        np02 = np.array([1,3,8])
        print(np02)
        print(np01[np02]) #[1 3 8]

"""

二维数组的高级索引
可以通过列表的写法,具体到那个数据
1.语法:np01[数组,数组] 精确到行数,直接使用数组定义到行数和列数
2.语法:np01[[行],[列]],利用list精确到行数和列数
3.语法:np01[元组,索引],利用索引获取多个数值。#第一行和第四行,第第3列到第6列
4.语法:np01[数组,列表]  np01[列表,数组] 混合使用 

"""
        np01 = np.arange(20).reshape(4,5)
        print("源数组为")
        print(np01)
        np02 = np.array([1,3])#第二行和四行
        print(np01[np02])
        print(np01[np02,np02])#第二行和四行 第2列和第4列

        np01 = np.arange(20).reshape(4,5)
        print("源数组为")
        print(np01)
        print(np01[[0,1],[2,3]]) #(0,2)(1,2)位置的数据
#以上是获取单个数据,如果想要获取一个矩阵的怎么办
        print(np01[(0,3),2:5]) #第一行和第四行,第第3列到第6列

        np02 = np.array([1,3])#第二行和四行
        print(np01[np02,[1,2]])#第二行和四行 第2列和第3列
        print(np01[[1,2],np02])#第2行和3行 第2列和第4列

3.布尔索引

布尔索引补更改原数组,创建的都是原数组的副本

#一维数组
        import numpy as np
        np01 = np.arange(20)
        np02 = np01>10#拿到一个布尔数组,要是大于10就返回true要是小于10就返回false
        print(np01)
        print(np02)
#可以根据布尔获取矩阵中大于10的数据
#二维数组
        np03 = np01[np02]
        print(np03)

        import numpy as np
        np01 = np.arange(20).reshape(4,5)
        print("源数组")
        print(np01)
        rows = [True,False,True,False] #相当于拿到第1、3行数据
        np02 = np01[rows,:]
        print(np02)
        #拿到(0,2) (2,4) 第一行第3列,第3行第5列
        cos = [False,False,True,False,True]
        np03 = np01[rows,cos]
        print(np03)
        #(0,2)(0,3)(2,2)(2,3)
        coss = np.array([False,False,True,True,False])
        np04 = np01[np.ix_(rows,coss)]
        np05 = np01[(0,2),2:4]
        print(np04)
        print(np05)

4.根据索引获取最大数据

       

 import numpy as np 

        data = np.sin(np.arange(20))
        data.shape = 5, 4
        print("data: ", data)
#获取最大值数据的索引,每一列的最大数据的索引位置
        ind = data.argmax(axis=0)  # 0代表列  1代表行
        print("index: ", ind)
        #data.shape[1] ==4 因为维度是(5,4)

# 行是[2 0 3 1]   列是[0,1,2,3]  (2,0)以此类推
        data_max = data[ind, range(data.shape[1])]
        print("data_max: ", data_max)
        print("data.max: ", data.max(axis=0))#求最大值
        print(all(data_max == data.max(axis=0)))

二 切片

1.一维数组的切片

##

语法[start:stop:step]      

  list01= [1,2,3,4,5]
        np01 = np.array(list01,dtype="int32")
        print(np01)

##
#①正向索引切片
        print(np01[:])#从0到0
        print(np01[3:])#从3开始到结尾
        print(np01[:5])#从0开始到5结尾
        print(np01[1:5:2])#步长是2


 

#反向索引切片
        print(np01[::-1])#-1证明是反向获取
        print(np01[-5:-2])
#正负一起使用
        print(np01[-5:4]) #[1 2 3 4]

#

2.二维数组的切片

##

[对进行切片,对的切片]
的切片:可以有start:stop:step
的切片:可以有start:stop:step

#创建二维数组

        list01= [
            [1,2],
            [3,4],
            [5,6],
            [7,8]
        ]
        np01= np.array(list01)
        print(np01)
        print(np01[:,:])#所有行所有列


 

#所有行部分列
        print(np01[:,1])#所有行第二列
        print(np01[:,0:2])#所有行的第一列和第二列


 

#部分列所有行
        print(np01[1,:])#获取第二行所有列
        print(np01[0:2,:])#获取第一和二行所有列
        print(np01[::2,:])#获取奇数行所有列

#部分行部分列
        print(np01[1,1])#第二行第二列

#组合使用的时候改怎么办
#获取第三行第二列(6),第四行第一列(7)
#行写成元组放在前面,列写成元组放在后面

       

 a= np01[(2,3),(1,0)]
        print(a)
#负索引的使用
        print(np01[-1])#最后一行
        print(np01[::-1])#行倒序
        print(np01[::-1,::-1])#行倒序,列倒叙

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值