Numpy数组基本操作(数组索引,数组切片以及数组的形状,数组的拼接与分裂)
一:数组的属性
每个数组都有它的属性,可分为:ndim(数组的维度),shape(数组每个维度的大小),size(数组的总大小),dtype(数组数据的类型)
二:数组索引
和python列表一样,Numpy的索引在一维数组中,也可以通过中括号重指定索引获取第i个值(从0开始)
如:
x1 = [1,2,3,4,5,6,7,8]
print(x1[0])
out: 1
比较有用的一个是,numpy支持负值索引,如print(x1[-1])
out:8
负值索引的时候是从-1开始的,-1表示倒数第一个数组位置对应的值
同样多维数组中,可以用逗号分隔索引元组获取元素,如:
x2 = [[3,5,2,4]
[7,6,8,8]
[1,6,7,7]]
x2 [0,0]
out:3
也可以用负值来索引,x2[-1,-1]
out:7
三:数组切片
切片的意思就是获取子数组,NumPy切片语法和Python列表的标准切片语法相同.为了获取数组x的一个切片,可以用以下方式:
x[start:stop:step]
如果以上3个参数都未指定,那么默认就是[0:0:1]
因为跟python列表的语法基本相同,大概举例一下,就不啰嗦了:
1.一维数组
x[:5] #前五个元素
x[5:] #索引五之后的元素
x[4:7] #第4-7位置的元素
x[::2] #每隔一个位置取一个元素
2.多维数组
多维数组采用同样的方式,用逗号分隔.
x[:2,:3] #两行,三列
x[:3,::2] #所有行,每个一列取一个元素
x[::-1,::-1] #逆序数组
3.获取数组的行和列
常见的需求是获取数组的单行和单列.可以将索引与切片组合起来实现这个功能,用一个冒号(:)表示空切片
x2[:,0] #x2的第一列
x2[0,:] #x2的第一行
在获取行时,出于语法简洁,可以省略空的切片:
x2[0] #等于 x2[0,:] 第一行
数组切片有一点非常重要,那就是数组切片返回的是数组数组的视图,而不是数组的副本.python列表切片是值的副本.也就是说如果改变了NumPy数组切片的值后,原始的数组值也会跟着改变.
而如果改变python列表切片的值,原列表的值并不受影响.如下:

可以看到x2_sub是x2的切片数组,当我们改变了x2_sub[0,0]的值后,x2对应位置的值也跟着发生变化了.
这种默认的处理方式实际上是非常有用的:它意味着在处理非常大的数据集时,可以获取或处理这些数据的片段,而不用复制底层的数据缓存.
既然上面有提到numpy数组的切片子数组是视图,改变切片的值会影响到原数组.那么当我们需要用到numpy数组的副本值的时候怎么处理?
这就要用到numpy的数组有copy()方法
如:

以上我们通过copy x2_sub_copy[:2,:2] 两行两列的子数组,并改变其子数组副本中的值,但结果并没有影响x2数组
四:数组的形状(shape)
数组的形状更多涉及的内容是数组的变形,也就是一维数组和多维数组,以及多维与多维数组之间的转换问题;主要通过reshape函数来实现;

gitd0 是一个一维数组,通过reshape函数转成了3x3的二维数组gird1,可以看到通过reshape函数转换后,gird0本身的形状(值)并没有改变.
因此我们大致可以理解为reshape函数转换的结果其实是一个副本.

注意:用reshape函数来转换数组的形状,要使转换成功有一个前提条件,那就是原始数组的大小必须和变形后的数组大小一致.
另外一个常见的变形模式是一维数组转变为二维的行或列的矩阵,简单地在一个切片操作中利用newaxis关键字:

五.数组的拼接与分裂
数组的拼接和分裂是针对的多个数组的操作.
1.数组的拼接
拼接或连接NumPy中的两个数组主要由np.concatenate,np.vstack和np.hstack例程实现
其中 np.concatenate将数组元组或数组列表作为第一个参数
一维数组:

二维数组拼接:

concatenate拼接的时候,如果没有特别指出 axis ,则默认沿着第一个轴拼接(垂直方向)
沿着固定维度处理数组时,使用np.vstack(垂直栈)和np.hstack(水平栈)函数会更直观简洁一些

进行数组拼接的时候,注意拼接的方向,数据位要对应上,如上面的垂直方向拼接的时候,所接的数组水平方向位数要跟被接数组的是一样3位
2.数组的分裂
数组的分裂和拼接是反方向的.分裂可以通过np.split,np.hsplit,vsplit函数来实现.

split(x,[3,5]) 其中的3和5是记录的分裂点的位置,表示的是在数组的 x[3]位置开始设置分裂点,也可以看成是第3个数位后面设置分裂点,方便理解就行.
这种通过设置分裂点的方式,分裂得出的子数组数会比分裂点多1
vsplit,hsplit和split的用法类似,

同样的vsplit(grid,[1]) 其中[1]和split中的参数是一样的,记录的是分裂点的位置
另外还可以进行第三个维度的分裂,比较少用,可以用到函数 np.dsplit ,有需要的时候再参考资料
Numpy数组基本操作(数组索引,数组切片以及数组的形状,数组的拼接与分裂)的更多相关文章
- NumPy学习(索引和切片,合并,分割,copy与deep copy)
NumPy学习(索引和切片,合并,分割,copy与deep copy) 目录 索引和切片 合并 分割 copy与deep copy 索引和切片 通过索引和切片可以访问以及修改数组元素的值 一维数组 程 ...
- numpy数组的索引和切片
numpy数组的索引和切片 基本切片操作 >>> import numpy as np >>> arr=np.arange(10) >>> arr ...
- Numpy学习二:数组的索引与切片
1.一维数组索引与切片#创建一维数组arr1d = np.arange(10)print(arr1d) 结果:[0 1 2 3 4 5 6 7 8 9] #数组的索引从0开始,通过索引获取第三个元素a ...
- 3.3Python数据处理篇之Numpy系列(三)---数组的索引与切片
目录 (一)数组的索引与切片 1.说明: 2.实例: (二)多维数组的索引与切片 1.说明: 2.实例: 目录: 1.一维数组的索引与切片 2.多维数组的索引与切片 (一)数组的索引与切片 1.说明: ...
- Numpy | ndarray数组基本操作
搞不懂博客园表格的排版... 说明: 0 ndarray :多维数组对象 1 np :import numpy as np 2 nda :表示数组的名称 1 生成数组 函数名 描述 np.array ...
- ndarray数组的索引和切片
索引:获取数组中特定位置元素的过程 切片:获取数组元素子集的过程 import numpy as np 一维数组 一维数组的索引和切片与python中的列表类似 索引:若元素个数为n,则索引下标可表示 ...
- go语言中的数组切片:特立独行的可变数组
go语言中的数组切片:特立独行的可变数组 初看go语言中的slice,觉得是可变数组的一种很不错的实现,直接在语言语法的层面支持,操作方面比起java中的ArrayList方便了许多.但是在使用了一段 ...
- JavaScript 数组基本操作
简介 数组操作无论是在JavaScript中还是在其他语言中都是很常见.经常会用到的,现在我把JavaScript 数组基本操作整理一下,供大家参考学习.里边包含我自己的见解以及案例,希望能够帮助大家 ...
- java 数组基本操作(一维)
1.数组的声明: 数组类型 数组名[] 2.数组的表示方法 想使用数组中的值,可以使用索引来实现,数组是从0开始的,使用时格式为:数组名[i],比如 a[1],代表第二个值 在数组中要使用数组的长度 ...
随机推荐
- 富文本数据 解析HTML
后台返回给前端的富文本数据如: { "status": 1, "info": "获取活动数据成功", "data": [ ...
- c++ string 类型 大小写转换
还是用以前的库函数就行的,toupper(int c)小写变大写和tolower(int c)大写变小写 可以直接这么干 string s = "ABCDEFG"; for( in ...
- matplotlib颜色线条及绘制直线
plt.axhline(y=0,ls=":",c="yellow")#添加水平直线 plt.axvline(x=4,ls="-",c=&qu ...
- PHP show_source() 函数
实例 对测试文件("test.php")进行 PHP 语法高亮显示: <html><body><?phpshow_source("test. ...
- 探究:编程语言那么多,为什么偏偏是 C 语言成了大学的必修课?
谁叫你不幸生在中国了? ——何祚庥(中国科学院院士) 这是一本给非计算机专业的大学生的C语言的书.“我不是学计算机的,为啥要学C语言?”这个问题每年在中华大地都会被问上几百万次.被问的对象可能是老师, ...
- P4463 [集训队互测2012] calc 拉格朗日插值 dp 多项式分析
LINK:calc 容易得到一个nk的dp做法 同时发现走不通了 此时可以考虑暴力生成函数. 不过化简那套不太熟 且最后需要求多项式幂级数及多项式exp等难写的东西. 这里考虑观察优化dp的做法. 不 ...
- MySQL InnoDB技术内幕:内存管理、事务和锁
前面有多篇文章介绍过MySQL InnoDB的相关知识,今天我们要更深入一些,看看它们的内部原理和机制是如何实现的. 一.内存管理 我们知道,MySQl是一个存储系统,数据最后都写在磁盘上.我们以前也 ...
- Shiro探索1. Realm
1. Realm 是什么?汉语意思:领域,范围:王国:这个比较抽象: 简单一点就是:Realm 用来对用户进行认证和角色授权的 再简单一点,一个用户怎么判断它有没有登陆?这个用户是什么角色有哪些权限? ...
- .Net Core 3.0依赖注入替换 Autofac
今天早上,喜庆的更新VS2019,终于3.0正式版了呀~ 有小伙伴问了一句Autofac怎么接入,因为Startup.ConfigureServices不能再把返回值改成IServiceProvide ...
- 【NOI2018】归程 题解(kruskal重构树+最短路)
题目链接 题目大意:给定一张$n$个点$m$条边的无向图.每条边有长度和海拔.有$Q$次询问,每次给定起点$v$和当天水位线$p$,每次终点都是$1$.人可以选择坐车或走路,车只能在海拔大于水位线的路 ...