Numpy 基础 :数组和矢量计算
Numpy 是高性能科学计算和数据分析的基础包。部分功能如下:
- ndarray,一个具有矢量算数运算和复杂广播能力的快速且节省空间的多维数组。
- 对数组数据进行快速运算(无需编写循环)
- 读写磁盘数据、操作内存映射文件。
- 线性代数、随机数生成,傅里叶变换。
- 集成由C/C++ /Fortran等语言编写的代码。
一、Numpy 的ndarray: 一种多维数组对象
ndarray 是一个通用的同构数据多维容器,也就是说,其中的所有元素必须是相同类型的。每个数组都有一个shape 和一个dtype。
1. 创建ndarray
- array函数,它接受一切序列型的对象。
In : data1 = [6, 7, 5, 8, 0, 1]
In : arr1 = np.array(data1)
In : arr1
Out : array([6, 7, 5, 8, 0, 1])
- zeros函数:
np.zeros(10) :一维
np.zeros(3, 7) :二维
- ones 函数:
np.ones(10) :一维
np.ones(3, 3) :二维
- arange函数:arange 是Python内置函数range 的数组版。
np.arange(15)
out : array([0, … , 14])
2. ndarray的数据类型
dtype(数据类型)是一个特殊的对象。在创建数组的时候可以直接指定数据类型:
In: arr1 = np.array([1, 2, 3], dtype = np.float64)
- astype 方法:转换数组的数据类型。
arr = np.array([1, 2, 3])
arr.dtype
float_arr = arr.astype(np.float64)
注: 调用astype无论如何都会创建出一个新的数组(原始数据的一份拷贝),即使新dtype和老dtype 相同也是如此。
3. 数组和标量之间的运算
3.1基本的索引和切片
3.2 数组转置和轴对称
转置(transpose)是重塑的一种特殊形式,他返回的是元数据的视图(不会进行任何复制操作)。数组不仅有转置方法,还有一个特殊的 T 属性。
注:简单的转置可以使用 ( .T) ,它其实就是进行轴对换而已。ndarray 还有一个swapaxes 方法,他余姚接收一对轴编号。
4.通用函数:快速的元素级数组函数
通用函数(即ufunc)是一种对ndarray 中的数据执行元素级运算的函数。
- 一元ufunc :
- 二元ufunc :
5.利用数组进行数据处理
Numpy 数组可以将多种数据处理任务表述为简洁的数据表达式。用数组表达式代替循环的做法,通常被称为矢量化。比纯python循环可以提高一到两个数量级。
6.将条件逻辑标书为数组运算
numpy.where 函数是三元表达式x if condition else y 的矢量化版本。假设有一个布尔数组和两个值数组:
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])
cond = np.array([True,False, True, True, False])
假设我们想要根据cond中的值选取xarr 和yarr的值:当cond 中的值为True 时,选取xarr 的值,否则从yarr 中选取。列表推导式的写法如下:
上面这种写法存在几个局限性,第一:它对大数组的处理速度不是很快(因为所有工作都是由纯python完成的)。第二:无法用于多维数组。使用np.where ,则可以将该功能写的非常简洁。
注:np.where 的第二个和第三个参数不必是数组。
注:传递给where 的数组大小可以不相等,甚至可以是标量。
7. 数学和统计方法
通过数组上的一组数学函数对整个数组或某个轴向的数据进行统计计算。sum、mean、以及标准差std 等聚合计算(aggregation,通常叫做约简reduction)既可以单做数组的实例方法调用,也可以当做顶级Numpy 函数使用。