栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

Numpy的索引使用

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Numpy的索引使用

Numpy的索引分为:
  • 1.基础索引
  • 2.布尔索引
  • 3.神奇索引
基础索引
import numpy as np
一维数组
x=np.arange(10)
x
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
x[:4]
array([0, 1, 2, 3])
x[2:-1]
array([2, 3, 4, 5, 6, 7, 8])
x[-3:]
array([7, 8, 9])
x[:-3]
array([0, 1, 2, 3, 4, 5, 6])
二维数组
X=np.arange(20).reshape(4,5)
X
array([[ 0,  1,  2,  3,  4],
       [ 5,  6,  7,  8,  9],
       [10, 11, 12, 13, 14],
       [15, 16, 17, 18, 19]])
# 使用行坐标 列坐标 实现行列筛选
X[0,0] # 第一行第一个元素等于X[0][0]
0
X[-1,2] # 最后一行的第三列
17
X[2] # 第三行
array([10, 11, 12, 13, 14])
X[-1] # 最后一行
array([15, 16, 17, 18, 19])
X[:-1] # 除去最后一行所有的行
array([[ 0,  1,  2,  3,  4],
       [ 5,  6,  7,  8,  9],
       [10, 11, 12, 13, 14]])
X[:2,2:4] # 筛选出前两行的第三列到第四列
array([[2, 3],
       [7, 8]])
X[:,2] # 所有行的第三列元素
array([ 2,  7, 12, 17])
注意:切片的修改会改变原来的数组
  • 原因:Numpy经常需要处理大数组,需要避免每次都复制
x
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
x[2:4]=666
x
array([  0,   1, 666, 666,   4,   5,   6,   7,   8,   9])
X
array([[ 0,  1,  2,  3,  4],
       [ 5,  6,  7,  8,  9],
       [10, 11, 12, 13, 14],
       [15, 16, 17, 18, 19]])
X[0,:2]=666
X
array([[666, 666,   2,   3,   4],
       [  5,   6,   7,   8,   9],
       [ 10,  11,  12,  13,  14],
       [ 15,  16,  17,  18,  19]])
神奇索引
  • 其实就是:用整个数组进行的索引,叫神奇索引
一维数组
x=np.random.randint(10,size=10)
x
array([9, 9, 1, 4, 0, 8, 0, 0, 4, 0])
x[[1,4,0]] # 通过索引返回元素
array([9, 0, 9])
index=np.array([[0,2],[1,3]]) # 通过索引返回元素
x[index]
array([[9, 1],
       [9, 4]])
实例:获取数组中最大的前N个数
# 随机生成1-100之间的10个数
arr=np.random.randint(1,100,size=10)
arr
array([56,  5, 93, 30, 63, 56, 11, 92, 26, 86])
arr=np.sort(arr) # 排序,升序
arr
array([ 2,  8, 10, 16, 27, 42, 47, 55, 81, 92])
arr.argsort()[-3:] # arr.argsort()会返回排序后的索引index
array([9, 7, 2], dtype=int64)
arr[arr.argsort()[-3:]] # 获取最大值对应的三个下标
array([86, 92, 93])
二维数组
X=np.arange(20).reshape(4,5)
X
array([[ 0,  1,  2,  3,  4],
       [ 5,  6,  7,  8,  9],
       [10, 11, 12, 13, 14],
       [15, 16, 17, 18, 19]])
# 筛选多行,列可以省略
X[[0,2]]
array([[ 0,  1,  2,  3,  4],
       [10, 11, 12, 13, 14]])
X[[0,2],:]   # 和上面一样
array([[ 0,  1,  2,  3,  4],
       [10, 11, 12, 13, 14]])
# 筛选多列,省略行
X[:,[0,2,3]]
array([[ 0,  2,  3],
       [ 5,  7,  8],
       [10, 12, 13],
       [15, 17, 18]])
# 筛选多行 多列
# 等同于(0,1)第一行的第二列元素(2,3)第三行第四列元素(3,4)第四行第五列元素
X[[0,2,3],[1,3,4]]
array([ 1, 13, 19])
布尔索引 一维数组
x=np.arange(10)
x
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
x>5
array([False, False, False, False, False, False,  True,  True,  True,
        True])
x[x>5] # 筛选出大于5的元素
array([6, 7, 8, 9])
实例:把一维数组进行01转换
x=np.arange(10)
x
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
x[x<=5]=0
x
x[x>5]=1
x
array([0, 0, 0, 0, 0, 0, 1, 1, 1, 1])
x=np.arange(10)
x
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
x[x<5]+=20
x
array([20, 21, 22, 23, 24,  5,  6,  7,  8,  9])
二维数组
X=np.arange(20).reshape(4,5)
X
array([[ 0,  1,  2,  3,  4],
       [ 5,  6,  7,  8,  9],
       [10, 11, 12, 13, 14],
       [15, 16, 17, 18, 19]])
X>5
array([[False, False, False, False, False],
       [False,  True,  True,  True,  True],
       [ True,  True,  True,  True,  True],
       [ True,  True,  True,  True,  True]])
X[X>5]
array([ 6,  7,  8,  9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19])
X[:,3]
array([ 3,  8, 13, 18])
X[:,3]>5
array([False,  True,  True,  True])
X[X>=5]=666
X
array([[  0,   1,   2,   3,   4],
       [666, 666, 666, 666, 666],
       [666, 666, 666, 666, 666],
       [666, 666, 666, 666, 666]])
X[X[:,3]>5]=666
X
array([[  0,   1,   2,   3,   4],
       [666, 666, 666, 666, 666],
       [666, 666, 666, 666, 666],
       [666, 666, 666, 666, 666]])
条件的组合
x=np.arange(10)
x
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
# 注意每个条件都要加小括号
condition=(x%2==0)|(x>7)
condition
array([ True, False,  True, False,  True, False,  True, False,  True,
        True])
x[condition]
array([0, 2, 4, 6, 8, 9])
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/300674.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号