数组的索引与切片

多维数组的索引

 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笔记续的更多相关文章

  1. React.js入门笔记(续):用React的方式来思考

    本文主要内容来自React官方文档中的"Thinking React"部分,总结算是又一篇笔记.主要介绍使用React开发组件的官方思路.代码内容经笔者改写为较熟悉的ES5语法. ...

  2. 【Stage3D学习笔记续】真正的3D世界(一):透视矩阵

    如果各位看官跟着我的学习笔记一路看过来的话,一定会吐槽我的,这都是什么3D啊?从头到尾整个都是在使用GPU绘制一堆2D图像而已,的确,之前我们一直使用正交矩阵利用GPU加速来实现2D世界的展示,算不上 ...

  3. 【Stage3D学习笔记续】山寨Starling(十二):总结和一些没提到的东西

    我们的山寨Starling到这里就告一段落了,不得不说这是一个非常优秀的2D框架,他的设计和架构为后来的许多框架都提供了很好的参考,比如现在正在崛起的Egret,我们的一番解读也只是窥见了Starli ...

  4. 【Stage3D学习笔记续】山寨Starling(十一):Touch事件体系

    我们的山寨Starling版本将会在这里停止更新了,主要还是由于时间比较有限,而且我们的山寨版本也很好的完成了他的任务“了解Starling的核心渲染”,接下来的Starling解析我们将会直接阅读S ...

  5. 【Stage3D学习笔记续】山寨Starling(十):高效游戏设计、纹理集和ATF

    我发布了经过批处理优化的v0.3版,点击下载:https://github.com/hammerc/hammerc-study-Stage3D/archive/v0.3.zip 先看看我们批处理优化后 ...

  6. 【Stage3D学习笔记续】山寨Starling(八):核心优化(批处理)的实现

    批处理是使GPU进行高效绘制的一种技术手段,也是整个渲染流程中最核心的技术,到目前为止我们并没有使用到这种技术手段,下面我们看看我们现在的渲染机制. 先想一想我们最开始是怎么向GPU绘制一幅图像的,可 ...

  7. 【Stage3D学习笔记续】山寨Starling(六):动画实现和测试

    我发布了一个版本v0.2,该版本是未优化版本,且没有添加Touch事件体系,但是由于是最基础且未优化的,所以可以通过参考代码快速的了解实现原理. 接下来的一段笔记开始进行渲染优化,我会把所有的目光都集 ...

  8. 【Stage3D学习笔记续】山寨Starling(四):渲染代码实现及测试程序

    本章会实现最核心的代码,所以涉及点会比较多,这里会发布一个版本,方便日后的回退查看. 点击下载:https://codeload.github.com/hammerc/hammerc-study-St ...

  9. 【Stage3D学习笔记续】山寨Starling(三):Starling核心渲染流程

    这篇文章我们剔除Starling的Touch事件体系和动画体系,专门来看看Starling中的渲染流程实现,以及其搭建的显示列表结构. 由于Starling是模仿Flash的原生显示列表,所以我们可以 ...

随机推荐

  1. jenkins之docker安装(jenkins/jenkins:lts)

    建议使用此镜像安装,不要使用官网推荐的jenkinsci/blueocean镜像,使用它构建node程序会出现问题. 1.宿主服务器jenkins_home目录权限 为了方便安装插件,升级,迁移,因此 ...

  2. Jenkins中插件下载失败的解决办法

    插件下载失败原因:通过国外服务器下载镜像,有较高的失败率,某些插件下载失败或者中断会引起其他有依赖关系的插件也下载失败 解决方案:1. 使用VPN.2. Jenkins镜像地址改为国内镜像地址:系统管 ...

  3. Go by Example-变量

    在上一节中提到了值类型,但是他们都是写在输出语句里的,如果后面程序需要用的话就显得非常的不方便,所以更好的办法就是把它们定义成变量,然后在调用. 变量 和Python不同的是,Go语言中的变量是需要的 ...

  4. QQ 为什么以 UDP 协议为主,以 TCP 协议为辅?

    QQ既有UDP也有TCP!不管UDP还是TCP,最终登陆成功之后,QQ都会有一个TCP连接来保持在线状态.这个TCP连接的远程端口一般是80,采用UDP方式登陆的时候,端口是8000. UDP协议是无 ...

  5. legend3---20、加东西之前要保证没有,删东西之前要保证有,无论前端后端

    legend3---20.加东西之前要保证没有,删东西之前要保证有,无论前端后端 一.总结 一句话总结: 加东西之前要保证没有,删东西之前要保证有,无论前端后端 这是很好的编程习惯,可以避免很多错误, ...

  6. SQL-W3School-函数:SQL FORMAT() 函数

    ylbtech-SQL-W3School-函数:SQL FORMAT() 函数 1.返回顶部 1. FORMAT() 函数 FORMAT 函数用于对字段的显示进行格式化. SQL FORMAT() 语 ...

  7. MindManager2018试用期过后 修改过期时间 破解使用

    MindManager2018试用期过后 修改过期时间 破解使用 2019年06月13日 15:58:11 一生中所爱 阅读数 1991更多 分类专栏: 工具软件使用   1.找到路径:C:\User ...

  8. django模型多对多调用

    对于如下的模型: from django.db import models # Create your models here. class Student(models.Model): name = ...

  9. npm教程、脚手架

    使用之前,我们先来掌握3个东西是用来干什么的. npm: Nodejs下的包管理器. webpack: 它主要的用途是通过CommonJS的语法把所有浏览器端需要发布的静态资源做相应的准备,比如资源的 ...

  10. CentOS7下搭建zabbix监控(五)——Web端配置自动发现并注册

    好像有点问题,没法自动添加主机,我后期再测测 (1).自动发现主机并注册 1)创建发现规则 2)编辑自动发现规则信息(这两步不配置问题也不大,因为在动作中也有主机IP地址) 3)添加自动发现的动作 4 ...