Numpy之数组的切片和索引

一维数组的索引和切片

如果数组是一维的,那么索引和切片就是跟 python 的列表是一样的。

import numpy as np
#1. 一维数组的索引和切片
a1 = np.arange(10)
print(a1)
#1.1 索引操作
print(a1[4])
#1.2 进行切片操作 与Python列表索引一致
print(a1[4:6])
#1.3 使用步长
print(a1[::2])
#1.4 使用负数作为索引
print(a1[-1])
out: [0 1 2 3 4 5 6 7 8 9]
4
[4 5]
[0 2 4 6 8]

多维数组的索引和切片

如果是多维的(这里以二维为例),那么在中括号中,给两个值,两个值是通过逗号分隔的,逗号前面的是行,逗号后面的是列。如果中括号中只有一个值,那么就是代表的是行。

#2. 多维数组
# 也是通过中括号来索引和切片,在中括号中使用,分割逗号前面的是行后面的是列
# 如果多维数组中只有一个值 那么这个值就是行
a2 = np.random.randint(0,10,size=(4,6))
print(a2)
out:[[0 4 9 5 6 8]
 [8 4 1 6 8 1]
 [2 6 6 9 8 4]
 [5 4 5 1 3 7]]
# a2[0]#取第一行
# a2[1:3] #第一行和第二行
a2[[0,2,3]] # 获取不连续023行的数据
out: array([[0, 4, 9, 5, 6, 8],
       [2, 6, 6, 9, 8, 4],
       [5, 4, 5, 1, 3, 7]])
a2[2,1]#获取第二行第一列
out: 6
#获取不连续的行和列 
a2[[1,2],[4,5]]#获取第一行第四列 你二行第五列
out: array([8, 4])
#获取连续的行和列
a2[1:3,4:6]
out: array([[8, 1],
       [8, 4]])
#获取某一列的数据
a2[:,1] #所有行都要取第一列
out:  array([4, 4, 6, 4])

布尔索引

布尔索引是通过相同数组上的 True 还是 False 来进行提取的。提取的条件可以有多个,那么如果有多个,可以使用&来代表且,|用来代表或,如果有多个条件,那么每个条件要使用圆括号括起来

#布尔索引
a2 = np.arange(24).reshape((4,6))  # reshape数组变形
print(a2)
out: [[ 0  1  2  3  4  5]
 [ 6  7  8  9 10 11]
 [12 13 14 15 16 17]
 [18 19 20 21 22 23]]

以布尔值为例会筛选出对应的元素

a2 < 10 
out: array([[ True,  True,  True,  True,  True,  True],
       [ True,  True,  True,  True, False, False],
       [False, False, False, False, False, False],
       [False, False, False, False, False, False]])
a2[a2<10] # 布尔索引 数组中小于10的元素
out: array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
a2[(a2<5) | (a2>10)] # a2<5 或者a2>10 或关系
out: array([ 0,  1,  2,  3,  4, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22,
       23])

数组值替换的三种方式

a3 = np.random.randint(0,10,size=(3,5)) #生成三行五列范围在0-10之间不包括10的数组
a3
out: array([[6, 4, 2, 1, 6],
       [3, 1, 5, 4, 4],
       [9, 6, 4, 8, 2]])
第一种方式 选中行替换
a3[1]= 0 #选中行进行替换
a3
out: array([[6, 4, 2, 1, 6],
       [0, 0, 0, 0, 0],
       [9, 6, 4, 8, 2]])
a3[1] = np.array([1,2,3,4,5]) #替换对等元素 数量一定要和原来的数组数量一致
a3
out: array([[6, 4, 2, 1, 6],
       [1, 2, 3, 4, 5],
       [9, 6, 4, 8, 2]])
第二种方式 使用条件索引实现
a3[a3<3]= 1  #所有小于3的全部设置为1 选中范围
a3
out: array([[6, 4, 1, 1, 6],
       [1, 1, 3, 4, 5],
       [9, 6, 4, 8, 1]])
第三种方式 使用函数实现
result = np.where(a3<5,0,1) # a3小于5的是0  a3>5的是1  where函数指定范围
print(result)
[[1 0 0 0 1]
 [0 0 0 0 1]
 [1 1 0 1 0]]

 上一篇
Numpy之多维数组 Numpy之多维数组
查看数组的维度ndim 查看数组的维度。 import numpy as np a1 = np.array([1,2,3]) #打印维度 print(a1.ndim) out: 1 #二维数组 a2 = np.array([[1,2
2018-02-26
下一篇 
Numpy之数组介绍 Numpy之数组介绍
Numpy 中的数组: Numpy 中的数组的使用跟 Python 中的列表非常类似。他们之间的区别如下: 一个列表中可以存储多种数据类型。比如 a = [1, ‘a’]是允许的,而数组只能存储同种数据类型。 数组可以是多维的,当多维数
2018-02-22
  目录