NumPy 高级索引

NumPy 比一般的 Python 序列提供更多的索引方式。除了之前看到的用整数和切片的索引外,数组可以由整数数组索引、布尔索引及花式索引。

整数数组索引

以下实例获取数组中(0,0),(1,1)和(2,0)位置处的元素。

实例

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

输出结果为:

[1  4  5]

以下实例获取了 4X3 数组中的四个角的元素。 行索引是 [0,0] 和 [3,3],而列索引是 [0,2] 和 [0,2]。

实例

import numpy as np x = np.array([[ 0, 1, 2],[ 3, 4, 5],[ 6, 7, 8],[ 9, 10, 11]]) print ('我们的数组是:' ) print (x) print ('\n') rows = np.array([[0,0],[3,3]]) cols = np.array([[0,2],[0,2]]) y = x[rows,cols] print ('这个数组的四个角元素是:') print (y)

输出结果为:

我们的数组是:
[[ 0  1  2][ 3  4  5][ 6  7  8][ 9 10 11]]这个数组的四个角元素是:
[[ 0  2][ 9 11]]

返回的结果是包含每个角元素的 ndarray 对象。

可以借助切片 : 或 … 与索引数组组合。如下面例子:

实例

import numpy as np a = np.array([[1,2,3], [4,5,6],[7,8,9]]) b = a[1:3, 1:3] c = a[1:3,[1,2]] d = a[...,1:] print(b) print(c) print(d)

输出结果为:

[[5 6][8 9]]
[[5 6][8 9]]
[[2 3][5 6][8 9]]

布尔索引

我们可以通过一个布尔数组来索引目标数组。

布尔索引通过布尔运算(如:比较运算符)来获取符合指定条件的元素的数组。

以下实例获取大于 5 的元素:

实例

import numpy as np x = np.array([[ 0, 1, 2],[ 3, 4, 5],[ 6, 7, 8],[ 9, 10, 11]]) print ('我们的数组是:') print (x) print ('\n') # 现在我们会打印出大于 5 的元素 print ('大于 5 的元素是:') print (x[x > 5])

输出结果为:

我们的数组是:
[[ 0  1  2][ 3  4  5][ 6  7  8][ 9 10 11]]大于 5 的元素是:
[ 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]

花式索引

花式索引指的是利用整数数组进行索引。

花式索引根据索引数组的值作为目标数组的某个轴的下标来取值。对于使用一维整型数组作为索引,如果目标是一维数组,那么索引的结果就是对应下标的行,如果目标是二维数组,那么就是对应位置的元素。

花式索引跟切片不一样,它总是将数据复制到新数组中。

1、传入顺序索引数组

实例

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

输出结果为:

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

2、传入倒序索引数组

实例

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

3、传入多个索引数组(要使用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]]

NumPy 切片和索引

NumPy 广播(Broadcast)

1 篇笔记 写笔记

  1. wra

    107***9066@qq.com

    265

    关于 np.ix_ 的具体使用:

    正文中没有详细说 np.ix_ 是怎么回事,我看了一下 help(numpy.ix_),说的比较详细。比如正文中举的例子中,x[np.ix_([1,5,7,2],[0,3,1,2])]这句话会输出一个4*4的矩阵,其中的元素分别是:

    x[1,0] x[1,3] x[1,1] x[1,2]
    x[5,0] x[5,3] x[5,1] x[5,2]
    x[7,0] x[7,3] x[7,1] x[7,2]
    x[2,0] x[2,3] x[2,1] x[2,2]

    相当于:

    y=np.array([[x[1,0], x[1,3], x[1,1], x[1,2]],\[x[5,0], x[5,3], x[5,1],x[5,2]],\[x[7,0] ,x[7,3], x[7,1], x[7,2]],\[x[2,0], x[2,3], x[2,1], x[2,2]]])

    就是说,如果 np.xi_ 中输入两个列表,则第一个列表存的是待提取元素的行标,第二个列表存的是待提取元素的列标,第一个列表中的每个元素都会遍历第二个列表中的每个值,构成新矩阵的一行元素。

    wra

    wra

    107***9066@qq.com

    1年前 (2020-03-31)

https://www.runoob.com/numpy/numpy-advanced-indexing.html

NumPy 高级索引相关推荐

  1. numpy 高级索引技巧

    文章目录 numpy高级索引和索引技巧 用索引数组索引 用布尔数组索引 所述ix_()函数 用字符串索引 线性代数 简单数组操作 技巧和窍门 "自动"整形 向量堆叠 直方图 num ...

  2. numpy高级索引(二维矩阵的索引是二维矩阵)

    目录 1.问题描述 2.查阅资料 3.实验 1.问题描述 最近在看语义分割的源码,但是预测阶段有一行代码看的我头大,不知道在索引些什么东西.后来经过查阅资料和实验发现这是numpy的高级索引,故写这篇 ...

  3. NumPy Cookbook 带注释源码 二、NumPy 高级索引和数组概念

    调整图像尺寸 # 这个代码用于调整图像尺寸 # 来源:NumPy Cookbook 2e Ch2.3import scipy.misc import matplotlib.pyplot as plt ...

  4. python获取数组中大于某一阈值的那些索引值_Python NumPy 高级索引——整数组索引、布尔索引及花式索引...

    NumPy 除了之前文章中介绍的用整数和切片的索引外,数组还可以由整数数组索引.布尔索引及花式索引. 整数数组索引 整数索引有助于基于 N 维索引来获取数组中任意元素.每个整数数组表示该维度的下标值. ...

  5. B07_NumPy 高级索引(整数数组索引,布尔索引,花式索引)

    NumPy高级索引 NumPy 比一般的 Python 序列提供更多的索引方式.除了之前看到的用整数和切片的索引外,数组可以由整数数组索引.布尔索引及花式索引. 整数数组索引 以下实例获取数组中(0, ...

  6. 【Pandas库】(6) 索引操作--改、查、高级索引

    各位同学好,今天我和大家分享一下Pandas库的索引操作中的修改值.查找值.高级索引. 首先,我们先定义两个变量ps1存放Series数据,pd1存放DataFrame数据,以便后续操作. impor ...

  7. Python 科学计算库 Numpy (二) —— 索引及切片

    目录 1. 索引及切片 (1)通过下标以及内置函数进行索引切片 (2)使用冒号分隔参数进行切片索引 (3)对部分元素进行索引并切片 (4)对多维数组进行索引切片 2. 高级索引 (1)整数数组索引 ( ...

  8. mongodb索引生成HTML页面,MongoDB高级索引

    在这一章节中,我们来学习高级索引,假设users集合的以下文档 - { "address": { "city": "Haikou", &qu ...

  9. NumPy学习(索引和切片,合并,分割,copy与deep copy)

    NumPy学习(索引和切片,合并,分割,copy与deep copy) 目录 索引和切片合并分割 copy与deep copy 索引和切片 通过索引和切片可以访问以及修改数组元素的值 一维数组 程序示 ...

最新文章

  1. R语言_基本统计分析
  2. tensorflow r1.5 版本差异调研
  3. 自定义FragmentTabHost实现可控制是否保存fragment状态
  4. How to make a Logical Volume ON AIX5.3
  5. 学习 | Node.js 之定时任务
  6. FFmpeg实现将图片转换为视频
  7. 数位板驱动压力测试_数位屏应如何选择?
  8. 学校管理系统设计java(数据库、源码、演讲内容、ppt等)
  9. java解压服务器文件夹,java解压7z文件
  10. Google浏览器无法上网问题解决
  11. Bugku CTF Web 滑稽 计算器 GET POST 矛盾 alert 你必须让他停下
  12. Unity3D点击按钮改变材质球颜色
  13. python的if-else语法
  14. 使用NGINX发布DEM切片
  15. 3D建模教程讲解!PBR场景制作破损的图书馆
  16. 经典蓝牙与低功耗蓝牙的区别(转)
  17. seo推广优化的方法
  18. 趋势科技Pc-cillin 2011网友使用体验
  19. 开黑不卡顿,运行不掉帧,高通骁龙 835 助力 NEST 2017 王者荣耀组决赛
  20. 绿盟扫描监测出URL存在http host 头攻击漏洞的解决方案

热门文章

  1. autojs开启悬浮窗权限_微信悬浮窗功能普及?甚至更胜一筹
  2. flat在java中的含义_java – 在flatingBy中使用flatMap的优雅方法
  3. java 按钮不显示文字_java – 使JButton中的文本不可见
  4. 千人网站服务器,千人云服务器
  5. 计算机CAD作文,【2人回答】职校课堂里我最喜欢上CAD课600字作文-3D溜溜网
  6. 白盒测试工具_别再头疼工作效率低!这些超实用的黑盒、白盒测试方法你都用上了吗?...
  7. java 内部类 引用_在Java中如何从内部引用匿名内部类?
  8. rda冗余分析步骤_分子生态网络分析(MENA)构建微生物网络示例
  9. java stringbuffer 转数组_JAVA之旅(十七)——StringBuffer的概述,存储,删除,获取,修改,反转,将缓存区的数据存储到数组中,StringBuilder...
  10. cocos2dx 字体外发光_Ps教程:只需4个图层!即可制作出超炫酷的荧光字体