数组的索引与切片

多维数组的索引

 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. [端口安全]Hydra密码爆破

    目录 0x01 简介 0x02 常见参数 0x03 使用案例 0x04 密码字典 0x01 简介 Hydra中文名:九头蛇,这是一款相当强大的爆破工具,它基本支持了所有可爆破协议,而且容容错率非常好 ...

  2. sonar,jiar,xray,jenkins[cli] [sudoers]

    curl -n -X POST http://52.83.39.59:8080'/job/CLA_SSO/buildWithParameters?token=11d710a8eac8012bea28b ...

  3. [游戏开发]imgui介绍

    创建窗口 ImGui::Begin("Hello, world!"); ImGui::End(); 其中, ImGui::Begin("Hello, world!&quo ...

  4. linux tcp 高并发最大连接数

    Linux下高并发socket最大连接数所受的限制问题 1.修改用户进程可打开文件数限制 在Linux平台上,无论编写客户端程序还是服务端程序,在进行高并发TCP连接处理时,最高的并发数量都要受到系统 ...

  5. 使用 If-Then-Else 逻辑进行分支

    If-then-else 逻辑看似简单,功能却十分强大,它可以根据不同条件执行不同的操作.If-then-else 逻辑可理解为:如果某个条件为 true (IF),则执行某个操作:如果条件为 fal ...

  6. Coroutine 协程

    https://en.wikipedia.org/wiki/Coroutine Coroutines are computer program components that generalize s ...

  7. 【MyEclipse初级】Web项目的访问路径更改

    背景:MyEclipse 开发的Web项目,发布Web项目到Tomcat,从浏览器访问路径配置和工程名称一致,思考是否可以自定义访问虚拟路径. 目标:修改访问Web项目的虚拟路径 步骤:工程名右键-& ...

  8. C# WinForm快捷键设置技巧

    C# WinForm快捷键设置技巧 1.Alt+*(按钮快捷键) 按钮快捷键也为最常用快捷键,其设置也故为简单.在大家给button.label.menuStrip等其他控件的Text属性指定名称时, ...

  9. 分析CSS布局神器

    只要在页面下加入如下css,整个css布局就清晰了 * { background-color: rgba(255,0,0,.2); } * * { background-color: rgba(0,2 ...

  10. Django之数据库对象关系映射

    Django ORM基本配置 到目前为止,当我们的程序涉及到数据库相关操作时,我们一般都会这么搞: 创建数据库,设计表结构和字段 使用 MySQLdb 来连接数据库,并编写数据访问层代码 业务逻辑层去 ...