1.概述

今天我们来讲一下Numpy数组的索引与切片,numpy数组的索引与切片和Python中的切片与索引的作用相同,可以快速的取出数据,进行下一步的运用或者查看,但是两种切片还有一些不同的地方。另外我们可以通过数组的变形拼接分裂快速的对数组进行做出改变,方便我们更快的对数组进行操作。

一、一维数组的索引与切片

ndarray对象的内容可以通过索引或切片来访问和修改,与 Python 中 list 的切片操作一样。

ndarray 数组可以基于 0 - n 的下标进行索引,切片对象可以通过内置的 slice 函数,并设置 start, stop 及 step 参数进行,从原数组中切割出一个新数组。

索引方式:X[index_value]

切片方式:X[start:stop:step]

首先创建一个数组

对数组进行索引,找到索引为2和6的元素

对数组进切片,查找从2开始到8结束,步长为2的元素。

需要注意的是,切片的结果会产生新的内存地址,如果要引用切片值,需要赋值给新的变量。

二、高维数组索引&切片

与Python原生的列表、元组不同的是,Numpy数组支持多维数组的多维索引,每一个逗号, 代表索引的一个维度

索引方法:x[维度,行,列]

x[维度][行][列]

二维和一维数组可以不指定维度

切片方法:x[维度的[start:stop:step],行的[start:stop:step],列的[start:stop:step]]

可以不指定步长,会默认为1

首先设置两个多维数组

1、索引

1.1索引出x1中第1行第1列的元素

1.2 索引出x2中第1个维度的第1行第1列的元素

2、切片

设置一个5维5行5列的np数组

2.1 切片出第二个维度中的第三行数据

2.2 切片出第三个维度中的第二行的第三个元素

2.3 切片出第二个维度中的第一行和第三行的第四个元素切片出前两个维度的第一行和第三行的前两列

三、修改元素值

1、修改某一个元素

1.1设置一个数组

1.2转换数据类型为浮点型

1.3将f1中的第三个元素改为3.14

2、修改数组中的多个元素

2.1将x3的前三个模块的第3行的第4列的元素改为2333

四、其它索引方式

1、整数索引

如果一个 ndarray 是非元组序列,数据类型为整数或布尔值的 ndarray,或者至少一个元素为序列对象的元组,我们就能够用它来索引 ndarray。高级索引始终返回数据的副本。与此相反,切片只提供了一个视图。

整数索引就是两种高级索引的类型之一,另一个高级索引方式为 布尔值索引。

整数索引有助于基于 N 维索引来获取数组中任意元素。每个整数数组表示该维度的下标值。当索引的元素个数就是目标 ndarray 的维度时,会变得相当直接。以下示例获取了 ndarray 对象中每一行指定列的一个元素。因此,行索引包含所有行号,列索引指定要选择的元素。

该结果包括数组中 (0,0) ,(1,1) 和 (2,0) 位置处的元素。

但如果需要的是按数字对行列同时进行索引的而不是索引单个值的话,应当使用下面的方式:

也可以利用数字索引生成同样维度的数组:

2.布尔索引

当结果对象是布尔运算(例如比较运算符)的结果时,将使用此类型的高级索引。

2.1设置一个4行3列的数组

2.2查看数组中大于5的元素

2.3 将数组中大于5的元素索引出来

五、关于视图

关于数组切片有一点很重要也非常有用,那就是数组切片返回的是数组数据的视图,而不是数值数据的副本。这一点也是 NumPy 数 组切片和 Python 列表切片的不同之处:在 Python 列表中,切片是值的副本。

对于切片出来的视图或视图中索引出来的元素(其实也是一个视图)进行修改时,原始数据也会被改变。因此我们想要保护原始数据,应该先创建副本,在副本上进行操作,以保证原始数据不被修改。

六、数组的变形拼接分裂

1、数组的变形

1.1 np.reshape()不改变数据的条件下修改形状

示例:将一个一维数组变成3*4数组

需要注意的是:变换形状之后的数组大小必须和原始数组相同

Xx1的数组的长度为10,无法变形为3行4列的数组,这时候就会报错,reshape()还有一个功能,就是帮我们回去行向量和列变量。

在使用reshape()的时候,可以将其中一个维度指定为-1,这样numpy就会自动计算出它的真实值。

1.2 np.newaxis 和reshape()方法获取行向量和列向量功能一样,np.newaxis方法也可以帮我们获取行向量与列向量行向量:列向量

Np.newaxis()比np.reshape()更高级的是:np.newaxis是和索引切片方法一起使用的,可以制定获取行列向量的长度,即先切片在转换成行向量或列向量

2、数组的拼接

当我们需要对多个数组进行操作时,这时候就需要拼接数组了,numpy提供了对数组进行拼接的方法

2.1 np.concatanate()

数组本身构成的列表作为np.concatenate()的参数之一,还有一个常用的参数是axis,用来指定拼接的方向:

axis = 0 按行拼接

axis = 1 按列拼接

默认的参数为axis = 0按行拼接(横向拼接)按列拼接(纵向拼接)

2.2np.vstack()

垂直栈拼接,按行拼接,数组本身构成的列表作为np.vstack()的参数

2.3 np.hstack()

平行栈,按列拼接,数组本身构成的列表作为np.hstack()的参数

2.4 np.dstack()

第三维度拼接,数组本身构成的列表作为np.dstack()的参数

3、数组的分裂

同数组的拼接一样,在处理多个数组时,也需要将数组进行分裂,numpy同时也提供了数组分裂的方法。

3.1 np.split()

在指定位置分裂,数组本身作为一个参数,分类位置构成的列表作为第二个参数,同时split也可以对一维数组和多位数组进行操作。一维数组/行向量/列向量多维数组

3.2np.hsplit()

按列在指定位置分裂

3.3 np.vsplit()

按行在指定位置分裂

4.数组的平铺

数据可以通过np.ravel()方法将多维的数组平铺成一维的数组。

python numpy矩阵切片_Numpy数组的索引与切片和变形拼接分裂相关推荐

  1. c语言随机生成整数存放一维数组_文科生学 Python 系列 7: Numpy 数组/索引和切片...

    第四课:本课内容: • 0. 导入 NumPy 包 • 1. 创建 NumPy 数组 • 2. 索引和切片 • 3. 读取文件 • 4. 布尔型索引 • 5. 数组的运算 • 6. 常用函数举例 Nu ...

  2. python数组索引和切片_python numpy数组的索引和切片的操作方法

    NumPy - 简介 NumPy 是一个 Python 包. 它代表 "Numeric Python". 它是一个由多维数组对象和用于处理数组的例程集合组成的库. Numeric, ...

  3. [Python] numpy.ndenumerate() 获得一对数组坐标和值

    Python numpy.ndenumerate() 获得一对数组坐标和值 功能: 多维索引迭代器. 返回一个迭代器,产生一对数组坐标和值. 语法: numpy.ndenumerate(arr) 输入 ...

  4. python一维数组和二维数组,Python numpy实现二维数组和一维数组拼接的方法

    撰写时间:2017.5.23 一维数组 1.numpy初始化一维数组 a = np.array([1,2,3]); print a.shape 输出的值应该为(3,) 二维数组 2.numpy初始化二 ...

  5. Numpy数组的索引与切片:取数组的特定行列

    0.前言 Numpy的数组除了可使用内置序列的索引方式之外,提供了更多的索引能力,如通过切片.整数数组和布尔数组等方式进行索引.这使得Numpy索引功能很强大,但同时也带来了一些复杂性和混乱性,尤其是 ...

  6. 多维数组的索引与切片_Numpy库使用入门(二)数据的索引和切片

    BERT:ERNIE,咱们下个星期三第二节是啥课? ERNIE:我康康......(`・ω・´) >>> table[3][2] >>> 2 >>> ...

  7. numpy矩阵乘法_NumPy矩阵乘法

    numpy矩阵乘法 NumPy matrix multiplication can be done by the following three methods. NumPy矩阵乘法可以通过以下三种方 ...

  8. 对数组下面的数组截取_numpy数组不同索引方式的区别

    numpy数组一般有三种索引方式: 基础索引与切片 布尔索引 神奇索引 三种方法都可截取原数组中的部分数据,但是使用的时候在本质上却有区别,尤其是在处理大量数据时,不弄清索引本质,会导致最后预测结果不 ...

  9. 多维数组的索引与切片_SystemVerilog的那些数组

    在计算机编程语言中,集合类型(collection)的数据结构都是非常重要的.这里集合的概念指的是能够将多个数据对象整合到一起进行管理和操作的复合数据类型.数组(array),是比较重要的.基础的.具 ...

最新文章

  1. oracleHelper 操作帮助类
  2. java stringbuffer 转数组_JAVA之旅(十七)——StringBuffer的概述,存储,删除,获取,修改,反转,将缓存区的数据存储到数组中,StringBuilder...
  3. [CF1042F]Leaf Sets
  4. 获取java返回的数据_java调用第三方接口,获取接口返回的数据。
  5. R语言 文本挖掘 tm包 使用
  6. 阅读react-redux源码(三) - mapStateToPropsFactories、mapDispatchToPropsFactories和mergePropsFactories
  7. python假设有三个列表_python基础三(列表和元组)
  8. Double Deep Q-Learning Netwok的理解与实现
  9. 数据库系统:NoSQL与SQL的区别
  10. 维护IBM DB2数据库所应了解的根蒂基本常识-9
  11. 各纬度气候分布图_世界气候类型分布图高清版(世界气候分布高清地图)V1.0 免费版...
  12. itx机箱尺寸_讲解 ATX M-ATX ITX 各种主板尺寸
  13. Android上Excel编辑器,Excel表格编辑器下载-Excel表格编辑器appv1.1.02 最新版-腾牛安卓网...
  14. hprose java 下载_Hprose Java下载
  15. HTTP和HTTPS
  16. 区块链电子合同铸就数字经济信任基石
  17. 数学公式——海伦公式
  18. Java面向对象之——封装
  19. 网易校招,网络运维工程师——满满的干货点
  20. spark sql优化:小表大表关联优化 union替换or broadcast join

热门文章

  1. 【转】终身受用的4个经典故事
  2. Failed during checkstyle execution
  3. jaxb xml 生成 java_使用 JAXB 工具根据 Java 类生成 XML 模式
  4. 【C++】二叉搜索树
  5. 要看历史书籍,这五部都很过瘾
  6. 手把手带你解决OBS Studio 无法录屏的问题
  7. JS与OC的交互 WebViewJavaScriptBridge WEB微信支付
  8. 超简单C#获取带汉字的字符串真实长度(单个英文长度为1,单个中文长度为2)
  9. workbeach约束简称_实际工程中,经常遇到两个构件通过光滑圆柱销钉的连接,这种约束称为...
  10. 传统老牌拥抱DTC营销模式,创维家电借力红人矩阵爆火海外