Nump中的ndarray:一种多维数组对象
Numpy最重要的一个特点就是其N维数组对象(即ndarray),该对象是一个快速而灵活的大数据集容器。你可以利用它对整块数据执行一些数学运算,其语法跟标量元素之间运算一样。
image.png创建ndarray
创建数组最简单的办法就是使用array函数,它接受一切序列型的对象(包含其他数组),然后产生一个的含有传入数据Numpy数组。以一个列表类型的转化例子:
image.png嵌套序列 (比如由一组等长列表组成的列表)将会被转化为一个多维数组:
image.png特殊数组(全0或全1数组、单位数组、空数组)
image.png image.png image.png image.png image.pngndarray的数据类型
dtype(数据类型)是一个特殊的对象,它含有ndarray将一块内存解释为特定数据类型所属信息:
image.pngdtype是Numpy如此强大和灵活的原因之一。多数情况下,它们直接映射到相应的机器表示,使得“读写磁盘上的二进制数据流”以及“集成低级语言代码”(如C以及Fortran)等 ,使得工作变得更加简单
image.png数组与标量之间的运算
数组与标量之间的运算很重要,因为这样你就不用编写循环即可对数据执行批量运算的操作。这个通常叫做矢量化,大小相等的数组之间的任何算术运算都会将运算应用到元素级别:
image.png基本的索引和切片
Numpy数组的索引是一个内容丰富的主题,因为选取数据子集或者单个元素的方式有很多。
image.png如上所示,当你将一个标量赋值给一个切片时,无论切片的元素是单个还是多个,该值都会自动广播到这个切片范围。**跟列表最重要的区别就是,数组切片是原始数组的视图。这个意味着数据是不会被复制的,视图上的修改都会反映到源数组上:
image.png由于Numpy的设计目的是处理大数据,所以你可以想象下,假如Numpy坚持要将数据复制来复制去,势必会产生性能问题和内存消耗问题
如果你想要得到的ndarray的切片的一份副本而非视图,可以使用显式复制,例如arr5.copy()
对于多维度数组,能做的事情更多,在一个二维数组中,各索引位置上的元素不再是标量,而是一维数组:
image.png image.png布尔型索引
image.png image.png image.png image.png通过布尔型索引选取数组中的数据,将总是创建数据的副本,即使返回一模一样的数组也是如此。
image.pngPython关键字and和or在布尔型数组中无效
通过布尔型数组设置值是一种经常用到的手段,为了将data中的所用的负值都设置为0
通过一维布尔型数组设置整行或整列的值
花式索引
花式索引是一个Numpy的术语,它指的是利用整数数组进行索引。只需传入一个用于指定顺序的整数列表或ndarray即可:
image.png未完待续
网友评论