NumPy基础:数组和矢量计算

一.ndarray

NumPy最重要的一个特点就是其N维数组对象ndarray,该对象是一个快速而灵活的大数据集容器。可以利用这个数组对整块数据执行一些数学运算,其语法跟标量元素之间的运算一样:
NumPy基础:数组和矢量计算
ndarray是一个通用的同构数据多维容器,也就是说,其中的所有元素必须是相同类型的。每个数组都有一个shape【表示各维度大小的元组】和一个dtype【用于说明数组数据类型的对象】:
NumPy基础:数组和矢量计算

二.创建ndarray

创建数组最简单的办法就是使用array函数。它接受一切序列型的对象,然后产生一个新的含有传入数据的NumPy数组。以一个列表的转换为例:
NumPy基础:数组和矢量计算
嵌套序列将会被转换为一个多维数组:
NumPy基础:数组和矢量计算
除非显式说明,np,array会尝试为新建的这个数组推断出一个较为合适的数据类型。数据类型保存在一个特殊的dtype对象中。除np.array之外,还有一些函数也可以新建数组。比如,zeros和ones分别可以创建指定长度或形状的全0或全1数组。empty可以创建一个没有任何具体值的数组。要用这些方法创建多维数组,只需传入一个表示形状的元组即可:
NumPy基础:数组和矢量计算
NumPy基础:数组和矢量计算
备注:np.empty会返回全0数组的想法是不安全的。很多情况下,它返回的都是一些未初始化的垃圾数据。
由于NumPy关注的是数值计算,因此,如果没有特别指定,数据类型基本都是float64浮点数类型。
常用函数如下:
NumPy基础:数组和矢量计算

三.ndarray的数据类型

dtype是一个特殊的对象,它含有ndarray将一块内存解释为特定数据类型所需的信息:
NumPy基础:数组和矢量计算
dtype是NumPy如此强大的原因之一。一般情况下,它们直接映射到相应地机器表示,这使得读写磁盘上的二进制数据流和集成低级语言代码等工作变得简单。数值型dtype的命名方式相同:一个类型名,后面跟一个用于表示各元素位长的数字。标准的双精度浮点值需要占用8个字节【64位】。因此,该类型在NumPy中就记作float64。
NumPy的数据类型:
NumPy基础:数组和矢量计算
NumPy基础:数组和矢量计算
可以通过ndarray的astype方法显式地转换其dtype:
NumPy基础:数组和矢量计算
备注:
调用astype会创建一个新的数组【原始数据的一份拷贝】,即使新dtype跟老dtype相同。
浮点数只能表示近似的分数值。在复杂计算中,由于可能会积累一些浮点错误,因此比较操作只能在一定小数位以内有效。