ndarray笔记续
数组的索引与切片
多维数组的索引
import numpy as np
arr=np.arange(1,25).reshape(2,3,4)
arr
# 输出 array([[[ 1, 2, 3, 4],
[ 5, 6, 7, 8],
[ 9, 10, 11, 12]], [[13, 14, 15, 16],
[17, 18, 19, 20],
[21, 22, 23, 24]]])
arr[1][2][3]
# 输出24
arr[1,2,3] # 与arr[1][2][3]结果一样
# 输出24 arr[0,0:2,1:3]
# 输出array([[2, 3],
[6, 7]])
arr[0][0:2][1:3] # 与arr[0,0:2,1:3]结果不一样
# 输出array([[5, 6, 7, 8]]) arr[0,1:2,1:3]
# 输出array([[6, 7]])
arr[0][0:2][1][1:3] # 这样与arr[0,1:2,1:3]结果才能达到一致
# 输出array([6, 7])
2. NumPy中的数组的切片
3. 布尔型索引
# 接上一个代码
arr>6
# 输出array([[[False, False, False, False],
[False, False, True, True],
[ True, True, True, True]], [[ True, True, True, True],
[ True, True, True, True],
[ True, True, True, True]]]) arr[arr>6]
# 输出array([ 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24])
4. 花式索引
import numpy as np
arr1 = np.arange(32).reshape(8,4)
# 输出 array([[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11],
[12, 13, 14, 15],
[16, 17, 18, 19],
[20, 21, 22, 23],
[24, 25, 26, 27],
[28, 29, 30, 31]]) arr1[[0,3,5],[0,3,2]] # 前一个取出行,后一个按位取出对应的列
# 输出 array([ 0, 15, 22]) arr1[[0,3,5]]
# 输出 array([[ 0, 1, 2, 3],
[12, 13, 14, 15],
[20, 21, 22, 23]]) arr1[np.ix_([0,3,5],[0,2,1,3])] # [0,2,1,3]可以改变列的位置
# 输出 array([[ 0, 2, 1, 3],
[12, 14, 13, 15],
[20, 22, 21, 23]])
数组转置与轴对换
1. transpose函数用于数组转置,对于二维数组来说就是行列互换
2. 数组的T属性,也是转置
arr1 = arr.T与arr2=arr.transpose()效果一样
通用函数:快速的元素级数组函数
ufunc:一种对ndarray中的数据执行元素级运算的函数,也可以看作是简单函数(接受一个或多个标量值,并产生一个或多个标量值)的矢量化包装起
|
一元ufunc |
说明 |
|
abs,fabs |
计算整数、浮点数或复数的绝对值。对于非复数值,可以使用更快的fabs |
|
sqrt |
计算各元素的平方根,相当于arr**0.5 |
|
square |
计算各元素的平方,相当于arr**2 |
|
exp |
计算各元素的指数e的x次方 |
|
log,log10log2 log1p |
分别为自然对数、底数是10的log,底数为2的log,log(1+x) |
|
sign |
计算各元素的正负号:1正数,0零,-1负数 |
|
cell |
计算各元素的ceiling值,即大于等于该值的最小整数 |
|
floor |
计算各元素的floor值,即小于等于该值的最大整数 |
|
rint |
将各元素值四舍五入到最接近的整数,保留dtype |
|
modf |
将数组的小数位和整数部分以两个独立数组的形式返回 |
|
isnan |
返回一个表示“哪些值是NaN(不是一个数字)”的布尔类型数组 |
|
isfinite,isinf |
分别返回一个表示“哪些元素是有穷的(非inf,非NaN)”或“哪些元素是无穷的”的布尔型数组 |
|
cos,cosh,sin sinh,tan,tanh |
普通型和双曲型三角函数 |
|
arccos,arccosh, arcsin,arctan, arctanh |
反三角函数 |
|
logical_not |
计算各元素not x的真值,相当于~和-arr |
|
add |
将数组中相同位置对应的元素相加 |
|
substract |
从第一个数组中减去第二个数组中的元素 |
|
multiply |
数组元素相乘 |
|
divide,floor_divive |
除法或者向下圆整除法(丢弃余数) |
|
pow |
对第一个数组中的元素A,根据第二个数组中的相应元素B,计算A的B次方 |
|
maximum,fmax |
元素级别的最大值,fmax会忽略NaN |
|
minimum,fmin |
元素级别的最小值,fmin会忽略NaN |
|
mod |
元素级的求模(除法的余数) |
|
copysign |
将第二个数组中的值的符号复制给第一个数组中的对应位置的值 |
|
greater, greater_equal,less less_equal,equal not_equal |
执行元素级别的比较运算,最终产生布尔型数组 |
|
logical_and, logical_or, logical_xor |
执行元素级别的布尔逻辑运算,相当于中缀运算符&、|、^ |
聚合函数
1. 聚合函数是对一组值(比如一个数组)进行操作,返回一个单一值作为结果的函数。因此求数组所有元素之和、求所有元素的最大最小值以及标准差的函数就是聚合函数
arr.max() arr.min() arr.mean()
arr.std()标准差,相当于np.sqrt(np.power(arr-arr.mean(),2).sum()/arr.size)
2. 聚合函数可以指定对数值的某个轴元素进行操作
arr.mean(axis=0)对每一列取均值 arr.mean(axis=1)对每一行取均值
axis=0时对同一列上的元素进行聚合 axis=1时对同一行上的元素进行聚合
np.where函数
1. np.where函数是三元表达式x if condition else y 的矢量化版本
import numpy as np
xarr=np.array([1.1,1.2,1.3,1.4,1.5])
yarr=np.array([2.1,2.2,2.3,2.4,2.5])
condition=np.array([True,False,True,True,False])
result=[(x if c else y) for x,y,c in zip(xarr,yarr,condition)]
result
# 输出 [1.1, 2.2, 1.3, 1.4, 2.5]
result2=np.where(condition,xarr,yarr)
result2
# 输出 array([1.1, 2.2, 1.3, 1.4, 2.5])
2. 案例:将数组中所有NaN缺失值替换为0
import numpy as np
arr=np.array([[1,2,np.NaN,4],[3,4,5,np.NaN]])
arr
# 输出array([[ 1., 2., nan, 4.],
[ 3., 4., 5., nan]])
np.isnan(arr)
# 输出array([[False, False, True, False],
[False, False, False, True]])
np.where(np.isnan(arr),0,arr)
# 输出array([[1., 2., 0., 4.],
[3., 4., 5., 0.]])
np.unique函数
求数组中不重复的元素
import numpy as np
pd=np.array(['图书','数码','小吃','美食','男装','美食','女装','小吃'])
np.unique(pd)
# 输出 array(['图书', '女装', '小吃', '数码', '男装', '美食'], dtype='<U2')
数组数据文件读写
1. 将数组以二进制格式保存到磁盘
import numpy as np
data = np.array([[1,2,3,4],[2,3,4,5],[6,7,8,9],[2,3,4,6]])
data
# 输出 array([[1, 2, 3, 4],
[2, 3, 4, 5],
[6, 7, 8, 9],
[2, 3, 4, 6]])
np.save('data',data) # 将多维数组存储到文件,自动添加后缀.npy (二进制文件)
np.load('data.npy') # 读取文件需要添加对应的后缀
# 输出 array([[1, 2, 3, 4],
[2, 3, 4, 5],
[6, 7, 8, 9],
[2, 3, 4, 6]])
2. 存取文本文件
import numpy as np
exp = np.loadtxt('example.csv',delimiter=',')
exp
# 输出array([[1., 2., 3., 4.],
[2., 4., 5., 7.],
[4., 1., 5., 9.]]) np.genfromtxt('example.csv',delimiter=',')
# 输出array([[1., 2., 3., 4.],
[2., 4., 5., 7.],
[4., 1., 5., 9.]])
3. 数据写入文本文件
import numpy as np
np.savetxt('arr.csv',exp.reshape((2,6)),delimiter=',',fmt='%.2f')
exp2=np.random.random((2,3,4))
# 如果数组为二维以上的数组,则必须转换为二维数组才能进行存储,否则一定会出错
np.savetxt('arr1.csv',arr3.reshape((4,6)),delimiter=',')
ndarray笔记续的更多相关文章
- React.js入门笔记(续):用React的方式来思考
本文主要内容来自React官方文档中的"Thinking React"部分,总结算是又一篇笔记.主要介绍使用React开发组件的官方思路.代码内容经笔者改写为较熟悉的ES5语法. ...
- 【Stage3D学习笔记续】真正的3D世界(一):透视矩阵
如果各位看官跟着我的学习笔记一路看过来的话,一定会吐槽我的,这都是什么3D啊?从头到尾整个都是在使用GPU绘制一堆2D图像而已,的确,之前我们一直使用正交矩阵利用GPU加速来实现2D世界的展示,算不上 ...
- 【Stage3D学习笔记续】山寨Starling(十二):总结和一些没提到的东西
我们的山寨Starling到这里就告一段落了,不得不说这是一个非常优秀的2D框架,他的设计和架构为后来的许多框架都提供了很好的参考,比如现在正在崛起的Egret,我们的一番解读也只是窥见了Starli ...
- 【Stage3D学习笔记续】山寨Starling(十一):Touch事件体系
我们的山寨Starling版本将会在这里停止更新了,主要还是由于时间比较有限,而且我们的山寨版本也很好的完成了他的任务“了解Starling的核心渲染”,接下来的Starling解析我们将会直接阅读S ...
- 【Stage3D学习笔记续】山寨Starling(十):高效游戏设计、纹理集和ATF
我发布了经过批处理优化的v0.3版,点击下载:https://github.com/hammerc/hammerc-study-Stage3D/archive/v0.3.zip 先看看我们批处理优化后 ...
- 【Stage3D学习笔记续】山寨Starling(八):核心优化(批处理)的实现
批处理是使GPU进行高效绘制的一种技术手段,也是整个渲染流程中最核心的技术,到目前为止我们并没有使用到这种技术手段,下面我们看看我们现在的渲染机制. 先想一想我们最开始是怎么向GPU绘制一幅图像的,可 ...
- 【Stage3D学习笔记续】山寨Starling(六):动画实现和测试
我发布了一个版本v0.2,该版本是未优化版本,且没有添加Touch事件体系,但是由于是最基础且未优化的,所以可以通过参考代码快速的了解实现原理. 接下来的一段笔记开始进行渲染优化,我会把所有的目光都集 ...
- 【Stage3D学习笔记续】山寨Starling(四):渲染代码实现及测试程序
本章会实现最核心的代码,所以涉及点会比较多,这里会发布一个版本,方便日后的回退查看. 点击下载:https://codeload.github.com/hammerc/hammerc-study-St ...
- 【Stage3D学习笔记续】山寨Starling(三):Starling核心渲染流程
这篇文章我们剔除Starling的Touch事件体系和动画体系,专门来看看Starling中的渲染流程实现,以及其搭建的显示列表结构. 由于Starling是模仿Flash的原生显示列表,所以我们可以 ...
随机推荐
- create an oauth app
github可以对自己的服务进行oauth认证,创建oauth认证的方式如下: github -> Settings -> Developer settings -> Develop ...
- hdu2476(区间dp+dp)
String painter Time Limit: 5000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) T ...
- Hibernate---进度1
关联映射:http://www.cnblogs.com/huxi/archive/2009/12/15/1624988.html 关联映射,hibernate查询方式:http://www.cnblo ...
- Windows使用Latex
目录 安装Texlive 安装TeXstudio 编写简单的文章 教程 安装Texlive 到清华大学开源软件镜像站下载Texlive2019.iso文件 下载之后,如果有光驱就装载,没有的话就解压. ...
- GCC编译流程及常用编辑命令
GCC 编译器在编译一个C语言程序时需要经过以下 4 步: 将C语言源程序预处理,生成.i文件. 预处理后的.i文件编译成为汇编语言,生成.s文件. 将汇编语言文件经过汇编,生成目标文件.o文件. 将 ...
- Docs-.NET-C#-指南-语言参考-预处理器指令:#if 预处理指令
ylbtech-Docs-.NET-C#-指南-语言参考-预处理器指令:#if 预处理指令 1.返回顶部 1. #if(C# 参考) 2018/06/30 如果 C# 编译器遇到 #if 指令,最终是 ...
- MySQL数据库备份之xtrabackup工具使用
一.Xtrabackup备份介绍及原理 二.Xtrabackup的安装 1.在centos7上基于yum源安装percona-xtrabackup软件 [root@node7 ~]# yum -y i ...
- Delphi 中记录类型 给记录指针赋值
PPersion=^TPersion; TPersion=packed record Name:string; Sex:string; Clasee:string; end; var persion: ...
- [opencv] copyTo函数的使用方法
OpenCV中image.copyTo()有两种形式: 1.image.copyTo(imageROI),作用是把image的内容粘贴到imageROI: 2.image.copyTo(imageRO ...
- 01.轮播图之一 :scrollView 轮播
接触的每个项目,都会用到轮播图的部分,轮播图都写了好多次,用过各种各样的方式写: 这篇总结的博客,我将分为几个篇幅写,希望写完这几篇博客之后,我能总结出自己写这个轮播的优缺和不同之处 scrollvi ...