numpy 数组索引

一、单个元素索引

一维数组索引

  1. >>> x = np.arange(10)
  2. >>> x[2]
  3. 2
  4. >>> x[-2]
  5. 8

二维数组索引

  1. >>> x.shape = (2,5) # now x is 2-dimensional
  2. >>> x[1,3]
  3. 8
  4. >>> x[1,-1]
  5. 9

数组切片

  1. >>> x = np.arange(10)
  2. >>> x[2:5]
  3. array([2, 3, 4])
  4. >>> x[:-7]
  5. array([0, 1, 2])
  6. >>> x[1:7:2]
  7. array([1, 3, 5])
  8. >>> y = np.arange(35).reshape(5,7)
  9. >>> y[1:5:2,::3]
  10. array([[ 7, 10, 13],
  11. [21, 24, 27]])

二、使用数组索引数组

例:产生一个一组数组,使用数组来索引出需要的元素。让数组[3,3,1,8]取出x中的第3,3,1,8的四个元素组成一个数组view

  1. >>> x = np.arange(10,1,-1)
  2. >>> x
  3. array([10, 9, 8, 7, 6, 5, 4, 3, 2])
  4. >>> x[np.array([3, 3, 1, 8])]
  5. array([7, 7, 9, 2])

当然,类似切片那样,Index也可以使用负数。但是索引值不能越界!

  1. >>> x[np.array([3,3,-3,8])]
  2. array([7, 7, 4, 2])

三、索引多维数组

例1:产生一个5X7的数组,选择0,2,4行,0,1,2列的数

  1. >>> y = np.arange(35).reshape(5,7)
  2. >>> y[np.array([0,2,4]), np.array([0,1,2])]
  3. array([ 0, 15, 30])

例2:选取第0,2,4行,第1列的值

  1. >>> y[np.array([0,2,4]), 1]
  2. array([ 1, 15, 29])

例3:选取第0,2,4行的值

  1. >>> y[np.array([0,2,4])]
  2. array([[ 0, 1, 2, 3, 4, 5, 6],
  3. [14, 15, 16, 17, 18, 19, 20],
  4. [28, 29, 30, 31, 32, 33, 34]])

四、布尔值或掩码索引数组

例1

  1. >>> y = np.arange(35)
  2. >>> b = y>20
  3. >>> y[b]
  4. array([21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34])

例2

  1. >>> b[:,5] # use a 1-D boolean whose first dim agrees with the first dim of y
  2. array([False, False, False, True, True], dtype=bool)
  3. >>> y[b[:,5]]
  4. array([[21, 22, 23, 24, 25, 26, 27],
  5. [28, 29, 30, 31, 32, 33, 34]])

例3

  1. >>> x = np.arange(30).reshape(2,3,5)
  2. >>> x
  3. array([[[ 0, 1, 2, 3, 4],
  4. [ 5, 6, 7, 8, 9],
  5. [10, 11, 12, 13, 14]],
  6. [[15, 16, 17, 18, 19],
  7. [20, 21, 22, 23, 24],
  8. [25, 26, 27, 28, 29]]])
  9. >>> b = np.array([[True, True, False], [False, True, True]])
  10. >>> x[b]
  11. array([[ 0, 1, 2, 3, 4],
  12. [ 5, 6, 7, 8, 9],
  13. [20, 21, 22, 23, 24],
  14. [25, 26, 27, 28, 29]])

  

五、数组与切片的组合索引数组  

例1:产生一个5X7的数组,使用数组来索引第一个轴,使用切换来索引第二个轴

  1. >>> y = np.arange(35).reshape(5,7)
  2. >>> y[np.array([0,2,4]),1:3]
  3. array([[ 1, 2],
  4. [15, 16],
  5. [29, 30]])

例2:切片与布尔类型索引

  1. >>> y[b[:,5],1:3]
  2. array([[22, 23],
  3. [29, 30]])

  

六、Structural indexing tools

例1:使用np.newwaxis可以直接扩展维度

  1. >>> y.shape
  2. (5, 7)
  3. >>> y[:,np.newaxis,:].shape
  4. (5, 1, 7)

例2:这是利用了扩展维度与广播特性的矩阵相加。用5X1矩阵与1X5矩阵相加。

  1. >>> x = np.arange(5)
  2. >>> x[:,np.newaxis] + x[np.newaxis,:]
  3. array([[0, 1, 2, 3, 4],
  4. [1, 2, 3, 4, 5],
  5. [2, 3, 4, 5, 6],
  6. [3, 4, 5, 6, 7],
  7. [4, 5, 6, 7, 8]])

例3:使用 ... 符号来表示其他维度

  1. >>> z = np.arange(81).reshape(3,3,3,3)
  2. >>> z[1,...,2]
  3. array([[29, 32, 35],
  4. [38, 41, 44],
  5. [47, 50, 53]])

这例子也相当于下面的代码实现

  1. >>> z[1,:,:,2]
  2. array([[29, 32, 35],
  3. [38, 41, 44],
  4. [47, 50, 53]])

  

  

另有:https://docs.scipy.org/doc/numpy/user/quickstart.html#fancy-indexing-and-index-tricks  

  

  

  

  

  

  

  

  

numpy - 数组索引的更多相关文章

  1. Numpy数组索引为-1和None

    numpy的数组操作方便,可以用:来切片,用布尔数组或者布尔表达式来查找符合条件的数据,也可以用数组作为另一个数组的索引来查找指定的数据.但有时也会见到数组索引为-1和None.两者的用法如下: 1. ...

  2. numpy 数组索引数组

    在numpy中,数组除了可以被整数索引,还可以被数组索引. a[b]就是已数组b的元素为索引,读取数组a的值. 当被索引数组a是一维数组,b是一维或则多维数组时,结果维度维度与索引数组b相同. a = ...

  3. Numpy入门(二):Numpy数组索引切片和运算

    在Numpy中建立了数组或者矩阵后,需要访问数组里的成员,改变元素,并对数组进行切分和计算. 索引和切片 Numpy数组的访问模式和python中的list相似,在多维的数组中使用, 进行区分: 在p ...

  4. Numpy数组对象的操作-索引机制、切片和迭代方法

    前几篇博文我写了数组创建和数据运算,现在我们就来看一下数组对象的操作方法.使用索引和切片的方法选择元素,还有如何数组的迭代方法. 一.索引机制 1.一维数组 In [1]: a = np.arange ...

  5. pandas数组和numpy数组在使用索引数组过滤数组时的区别

    numpy array 过滤后的数组,索引值从 0 开始. pandas Series 过滤后的 Series ,保持原来的索引,原来索引是几,就是几. 什么意思呢,来看个栗子: import num ...

  6. numpy数组的索引和切片

    numpy数组的索引和切片 基本切片操作 >>> import numpy as np >>> arr=np.arange(10) >>> arr ...

  7. Numpy数组基本操作(数组索引,数组切片以及数组的形状,数组的拼接与分裂)

    一:数组的属性 每个数组都有它的属性,可分为:ndim(数组的维度),shape(数组每个维度的大小),size(数组的总大小),dtype(数组数据的类型) 二:数组索引 和python列表一样,N ...

  8. numpy数组、向量、矩阵运算

    可以来我的Github看原文,欢迎交流. https://github.com/AsuraDong/Blog/blob/master/Articles/%E6%9C%BA%E5%99%A8%E5%AD ...

  9. 操作 numpy 数组的常用函数

    操作 numpy 数组的常用函数 where 使用 where 函数能将索引掩码转换成索引位置: indices = where(mask) indices => (array([11, 12, ...

随机推荐

  1. 项目-开发手机app

    一.  安装Hbuilder,和夜神安卓模拟器 注:夜神模拟器,如过windows中安装了hyper-v,需要卸载,不然会死机 二. Hbuilder简介 官网:http://www.dcloud.i ...

  2. Java-确定被加载类的路径

    如何输出当前类在硬盘的物理路径 package com.tj; import java.net.URL; import java.security.CodeSource; import java.se ...

  3. android 之 service

    在Activity中设置两个按钮,分别为启动和关闭Service: bt01.setOnClickListener(new Button.OnClickListener() { @Override   ...

  4. How To Configure VMware fencing using fence

    本文主要简单介绍一下如何在RHEL 7 Pacemaker中配置一个fence_vmware_soap类型的STONITH设备(仅供测试学习). STONITH是Shoot-The-Other-Nod ...

  5. x86 idt

    Interrupt/trap gate

  6. 雅礼培训4.3 Problem A 【点分治】

    题目简述 一个\(N\)个节点的树,有\(M\)个炸弹分布在一些节点上,有各自的威力,随着其他点距离增大对其他点的伤害呈等差减小,直至为0 问每个点受到的伤害 题解 QAQ考场代码没处理好有些炸弹威力 ...

  7. run as maven build时报错

    eclipse中使用maven插件的时候,运行run as maven build的时候报错 -Dmaven.multiModuleProjectDirectory system propery is ...

  8. 服务器内部转发forward,action到action

    如果request.getRequestDispatcher();中不是页面而是传action的话,参考以下内容修改: web.xml 2.4版本里,默认的filter只拦截request. 如果使用 ...

  9. Java线程的学习_线程池

    系统启动一个新线程需要很高的成本,因为它涉及与操作系统交互.在这种情况下,使用线程池可以很好地提高性能,尤其是当程序中需要创建大量生存期很短暂的线程时. 线程池在系统启动时即创建大量空闲的线程,程序将 ...

  10. 选取第K大数的快速选择算法和注意事项

    快速选择算法,是一种能在大致O(N)的时间内选取数组中第k大或者k小的算法.其基本思路与快速排序算法类似,也是分治的思想. 其实这个算法是个基础算法,但是不常用,所以今天编的时候错了POJ2388,才 ...