numpy的索引和切片

索引

#基础索引

##一维数组

语法

np01[index]

    根据索引查询  np01[index]

    根据索引修改数据  np01[index]=值

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

##二维数组

语法

  np01[行][列]

查询和修改数据

    根据索引查询  np01[行][列]

    根据索引修改数据  np01[行][列]=值

np01 = np.arange(20).reshape(4,5)
print("源数组为")
print(np01)
print(np01[0,2])#第一行第三列的数据
print(np01[1,:])#第二行的所有列
print(np01[:,0])#所有行的第一列
print(np01[1:3,2:4])#行2到4行就是第2、3行,列第三列到第5列,就是第3、4列
np01[1,3] =100 #第2行第4列的数据修改为100
print("源数组为")
print(np01)

#高级索引

一维数组

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

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列

#布尔索引

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

1,一维数组

利用布尔索引获取值

        1.flase,不获取    true:获取

        2.和比较运算符结合使用

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)

2,二维数组

np.ix_(行布尔索引,列布尔索引)  计算笛卡尔乘积

       np02[笛卡尔乘积]

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)

切片

#一维数组

  切片:

  一正一负,一负一正,左开右闭,从左到右有区间

  语法:np01[index_01 : index_02]

np01=np.array([1,3,5,7,9,2,4,6,8,4])
print(np01[1:6])
print(np01[-9:-4])
print(np01[1:-4])
print(np01[-9:6])

#二维数组

切片:

   语法:np01[行_01 : 列_02,行_01 : 列_02]

   如果想要查询所有的行和列,可以直接写 :

list01=[
    [1,5,6,7],
    [1,2,3,4],
    [9,8,7,5],
    [7,6,5,9]
]
np02=np.array(list01)
print(np02[:,1:3])
print(np02[-2:,-2:])

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值