首页 > 其他分享 >9. NumPy高级索引

9. NumPy高级索引

时间:2022-09-26 09:34:50浏览次数:49  
标签:numpy print 高级 索引 数组 np import NumPy

1. 前言

NumPy 与 Python 的内置序列相比,它提供了更多的索引方式。除了在《Numpy切片和索引》一节用到索引方式外,在 NumPy 中还可以使用高级索引方式,比如整数数组索引、布尔索引以及花式索引,本节主要对上述三种索引方式做详细介绍。

高级索引返回的是数组的副本(深拷贝),而切片操作返回的是数组视图(浅拷贝)。如果您对副本和视图的概念陌生,可直接跳转学习《NumPy副本和视图》一节。

2. 整数数组索引

整数数组索引,它可以选择数组中的任意一个元素,比如,选择第几行第几列的某个元素,示例如下:

import numpy as np
#创建二维数组
x = np.array([[1,  2],  [3,  4],  [5,  6]])
#[0,1,2]代表行索引;[0,1,0]代表列索引
y = x[[0,1,2],[0,1,0]] 
print (y)

输出结果是:

[1  4  5]

对上述示例做简单分析:将行、列索引组合会得到 (0,0)、(1,1) 和 (2,0) ,它们分别对应着输出结果在原数组中的索引位置。

下面再看一组示例:获取了 4*3 数组中的四个角上元素,它们对应的行索引是 [0,0] 和 [3,3],列索引是 [0,2] 和 [0,2]。

import numpy as np
b = np.array([[ 0, 1, 2],
              [ 3, 4, 5],
              [ 6, 7, 8],
              [ 9,10,11]])
r = np.array([[0,0],[3,3]])
c = np.array([[0,2],[0,2]])
#获取四个角的元素
c = b[r,c]
print(c)

输出结果:

[[ 0 2]
[ 9 11]]

您也可以将切片所使用的:或省略号...与整数数组索引结合使用,示例如下:

import numpy as np
d = np.array([[ 0,  1,  2],
              [ 3,  4,  5],
              [ 6,  7,  8],
              [ 9, 10, 11]])
#对行列分别进行切片
e = d[1:4,1:3]
print(e)
#行使用基础索引,对列使用高级索引
f = d[1:4,[1,2]]
#显示切片后结果
print (f)
#对行使用省略号
h=d[...,1:]
print(h)

输出结果:

#e数组
[[ 4  5]
[ 7  8]
[10 11]]
#f数组
[[ 4  5]
[ 7  8]
[10 11]]
#h数组
[[ 1,  2],
 [ 4,  5],
 [ 7,  8],
 [10, 11]]

3. 布尔数组索引

当输出的结果需要经过布尔运算(如比较运算)时,此时会使用到另一种高级索引方式,即布尔数组索引。下面示例返回数组中大于 6 的的所有元素:

#返回所有大于6的数字组成的数组
import numpy as np
x = np.array([[ 0,  1,  2],[ 3,  4,  5],[ 6,  7,  8],[ 9, 10, 11]])
print (x[x > 6])

输出结果:

[ 7  8  9 10 11]

我们可以使用补码运算符来去除 NaN(即非数字元素),如下所示:

import numpy as np
a = np.array([np.nan, 1,2,np.nan,3,4,5])
print(a[~np.isnan(a))

输出结果:

[ 1.   2.   3.   4.   5.] 

下面示例,删除数组中整数元素,如下所示:

import numpy as np
a = np.array([1, 2+6j, 5, 3.5+5j])
print( a[np.iscomplex(a)])

输出结果如下:

[2.0+6.j  3.5+5.j] 

4. 花式索引(拓展知识)

花式索引也可以理解为整数数组索引,但是它们之间又略有不同,下面通过示例做简单讲解。(本内容作为拓展知识了解即可)

花式索引也会生成一个新的副本。

当原数组是一维数组时,使用一维整型数组作为索引,那么索引结果就是相应索引位置上的元素。

>>> import numpy as np
>>> x=np.array([1,2,3,4])
>>> print(x[0])
1

如果原数组是二维数组,那么索引数组也需要是二维的,索引数组的元素值与被索引数组的每一行相对应,示例如下:

import numpy as np
x=np.arange(32).reshape((8,4))
#分别对应 第4行数据、第2行数据、第1行数据、第7行数据项
print (x[[4,2,1,7]])

输出结果:

[[16 17 18 19]
[ 8  9 10 11]
[ 4  5  6  7]
[28 29 30 31]]

也可以使用倒序索引数组,示例如下:

import numpy as np
x=np.arange(32).reshape((8,4))
print (x[[-4,-2,-1,-7]])

输出结果:

[[16 17 18 19]
[24 25 26 27]
[28 29 30 31]
[ 4  5  6  7]]

还可以同时使用多个索引数组,但这种情况下需要添加np.ix_

import numpy as np
x=np.arange(32).reshape((8,4))
print (x[np.ix_([1,5,7,2],[0,3,1,2])])

输出结果如下:

[[ 4  7  5  6]
[20 23 21 22]
[28 31 29 30]
[ 8 11  9 10]]

其中 [1,5,7,2] 代表行索引,而 [0,3,1,2] 表示与行索引相对应的列索引值,也就是行中的元素值会按照列索引值排序。比如,第一行元素,未排序前的顺序是 [4,5,6,7],经过列索引排序后变成了 [4,7,5,6]。

标签:numpy,print,高级,索引,数组,np,import,NumPy
From: https://www.cnblogs.com/jiajunling/p/16729776.html

相关文章

  • 《JavaScript高级程序设计》Chapter03学习笔记
    Chapter03JavaScriptLanguageSyntax类C区分大小写,标识符可以字母、下划线(_)、美元符号($)开头语句以分号(;)结尾:虽然不加分号也是被允许的,但会导致性能的降......
  • mysql索引
    索引MySQL使用索引快速查找具有特定列值的行。如果没有索引,MySQL必须扫描整个表以找到相关的行。较大的表,搜索速度越慢。索引由类型和方法组成(有的时候你没有指定就......
  • 老杜MySQL/days.05(索引、视图、三范式)
    1.索引a.索引是在数据库表的字段上添加的,为了提高查询效率而存在的一种机制;b.相当于目录,可以缩小扫描范围而存在的一种机制;c.一张表的一个字段可以添......
  • numpy简单使用
    1.安装以及测试简介NumPy是一个运行速度非常快的数学库,主要用于数组计算,包含:一个强大的N维数组对象ndarray广播功能函数整合C/C++/Fortran代码的工具线性代......
  • 六、python基础知识之变量常量、索引取值和PEP8规范
    目录一、变量与常量1.什么是变量?2.什么是常量?变量的基本使用变量使用的语法结构与底层原理变量名的命名规范和命名风格变量的命名风格常量的基本使用二、索引取值三、PEP......
  • Spring 高级-jdk反射优化
    一、代码packagecom.mangoubiubiu.show.asm;importjava.lang.reflect.Field;importjava.lang.reflect.Method;//运行时请添加--add-opensjava.base/java.lan......
  • 高级 JS 概念:与关键字 this 的幽会
    高级JS概念:与关键字this的幽会介绍在这个博客中,我将尝试解释可怕的这个以最简单的方式为您提供关键字。这这个关键字是高级/中级JavaScript中最重要的概念......
  • Spring 高级 AOP 实现之 agent 增强
    一、代码 packagecom.itheima.aop;importorg.aspectj.lang.annotation.Aspect;importorg.aspectj.lang.annotation.Before;importorg.slf4j.Logger;importor......
  • Spring 高级 AOP 实现之 ajc 编译器
    一、代码packagecom.itheima.aop;importorg.aspectj.lang.annotation.Aspect;importorg.aspectj.lang.annotation.Before;importorg.slf4j.Logger;importorg.......
  • 你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    搜索引擎是咱们在日常生活、工作必备的工具查个明星八卦、地址,搜索遇到的某个问题的解决方法但是,作为一个有追求、有理想的技术人员其实搜索引擎的背后,有很多......