数组的索引和切片

Numpy学习笔记004

六、数组的索引和切片

jupyter notebook 环境

1.一维数组的索引和切片
import numpy as np
a1 = np.arange(2,19)
print(a1[1])    #获取下标为1的元素
print("="*30)
#切片
print(a1[:])   #取数组中所有数
print("="*30)
print(a1[1:4]) #取左不取右
print("="*30)
print(a1[2:6:2]) # [开始索引:结束索引 : 步长 ],这三个参数都可以省略,步长默认为1
3
==============================
[ 2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18]
==============================
[3 4 5]
==============================
[4 6]
2.多维数组的索引和切片

也是通过中括号来索引,在中括号中,使用逗号进行分割,逗号前是行,后是列,如果只有一个值则为行。

注意:数组的行和列的下标都是从0开始,这里假设下标为0处为第1列或第1行。

2.1 获取行
a2 = np.random.randint(0,10,size=(4,6))   # 元素是从0-10之间随机的4行6列的数组
print(a2)
print("="*20)
print(a2[0])           #获取第一行
print("="*20)
print(a2[1:3])         #获取第二和第三行
print("="*20)
print(a2[[0,2,3]])      #获取第一、三、四行

某次结果如下:

[[2 8 4 4 5 3]
 [3 7 6 1 7 7]
 [2 6 7 7 8 4]
 [5 6 7 9 4 0]]
====================
[2 8 4 4 5 3]
====================
[[3 7 6 1 7 7]
 [2 6 7 7 8 4]]
====================
[[2 8 4 4 5 3]
 [2 6 7 7 8 4]
 [5 6 7 9 4 0]]
2.2 获取列
a2 = np.random.randint(0,10,size=(4,6))   # 元素是从0-10之间随机的4行6列的数组
print(a2)
print("="*20)

#获取某一列
print(a2[ : ,2])    # 所有行,第三列(结果是从左到右排布,但还是列)
print("="*20)

print(a2[ : ,1:3])  #所有行,第二列到第四列(取左不取右)
print("="*20)

print(a2[ : ,[1,3]])  #所有行,第二和第四列
print("="*20)
[[3 7 1 7 8 9]
 [5 2 4 4 6 0]
 [3 0 1 1 1 2]
 [6 3 6 7 9 3]]
====================
[1 4 1 6]
====================
[[7 1]
 [2 4]
 [0 1]
 [3 6]]
====================
[[7 7]
 [2 4]
 [0 1]
 [3 7]]
2.3 获取值
a2 = np.random.randint(0,10,size=(4,6))   # 元素是从0-10之间随机的4行6列的数组
print(a2)
print("="*20)
      
#获取某个数据
print(a2[1,3])   #第2行第三列(行和列下标都是从0开始,假设下标为0处为第1列或第1行)
print("="*20)

print(a2[[1,2],[2,3]])
print("="*20)

print(a2[1:3,2:4])   #行列满足第一行或第二行,第二列或第三列
[[7 2 1 1 5 0]
 [0 9 0 1 0 1]
 [6 1 6 6 5 2]
 [7 0 7 6 4 0]]
====================
1
====================
[0 6]
====================
[[0 1]
 [6 6]]
3.布尔索引
a3 = np.arange(0,24).reshape((4,6))  #重新修改数组的维数,修改后的数组数量要和原来的一致
print(a3)
[[ 0  1  2  3  4  5]
 [ 6  7  8  9 10 11]
 [12 13 14 15 16 17]
 [18 19 20 21 22 23]]
a3 < 10

结果返回布尔值组成的数组:

array([[ True,  True,  True,  True,  True,  True],
       [ True,  True,  True,  True, False, False],
       [False, False, False, False, False, False],

根据布尔值取出数据

a3[a3<10]  #将所有布尔值为True(即满足a3<10)的值取出
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
a3[(a3<5) | (a3>10)]  #取出a3<5或a3>10的数
array([ 0,  1,  2,  3,  4, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22,
       23])
4.值的替换
a4 = np.arange(0,30).reshape((5,6))
print(a4)
[[ 0  1  2  3  4  5]
 [ 6  7  8  9 10 11]
 [12 13 14 15 16 17]
 [18 19 20 21 22 23]
 [24 25 26 27 28 29]]

4.1 将第三行的所有值都替换成0

a4[3] = 0
print(a4)
[[ 0  1  2  3  4  5]
 [ 6  7  8  9 10 11]
 [12 13 14 15 16 17]
 [ 0  0  0  0  0  0]
 [24 25 26 27 28 29]]

4.2 将小于10的所有值全部都替换成2

a4变为4.1的结果

a4[a4<10] = 2
print(a4)
[[ 2  2  2  2  2  2]
 [ 2  2  2  2 10 11]
 [12 13 14 15 16 17]
 [ 2  2  2  2  2  2]
 [24 25 26 27 28 29]]

4.3 使用函数来实现
a4变为4.2的结果

a4 = np.where(a4<10,1,0)  #把a4中所有小于10的数全部变成1,其余的变成0
print(a4)
[[1 1 1 1 1 1]
 [1 1 1 1 0 0]
 [0 0 0 0 0 0]
 [1 1 1 1 1 1]
 [0 0 0 0 0 0]]
  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值