numpy快速入门
一**、NumPy简介**
1、NumPy简介是
机器学习三剑客之一。
NumPy(Numerical Python) 是 Python 语言的一个扩展程序库,支持大量的维度数组与矩阵运算,同时对数组运算提供了大量的数学函数库。
Numpy 是一个运行速度非常快的数学库,内部解除了CPython的GIL(全局解释器锁),运行效率极好,主要用于数组计算,是大量机器学习框架的基础库,NumPy主要包括如下:
(1)强大的N维数组对象 ndarray
(2)广播功能函数
(3)整合 C/C++/Fortran 代码的工具
(4)线性代数、傅里叶变换、随机数生成等功能。
NumPy 通常与 SciPy(Scientific Python)和 Matplotlib(绘图库)组合使用,用于替代 MatLab。
2、NumPy的优缺点
NumPy优点如下:
(1)对于同样的数值计算任务,使用NumPy要比直接编写Python代码便捷得多。
(2)NumPy中的数组的存储效率和输入输出性能均远远优于Python中等价的基本数据结构,且其能够提升的性能是与数组中的元素成比例的。
(3)NumPy的大部分代码都是用C语言写的,其底层算法在设计时就有着优异的性能,这使得NumPy比纯Python代码高效得多
NumPy缺点如下:
由于NumPy使用内存映射文件以达到最优的数据读写性能,而内存的大小限制了其对TB级大文件的处理;NumPy数组的通用性不及Python提供的list容器。
3、NumPy安装
pip install –user numpy
--user 选项可以设置只安装在当前的用户下,而不是写入到系统目录。
二 NumPy功能
简单介绍一下numpy的话,这就是一个基于多维数组的python科学计算的核心库。 可以进行数组创建 、数组转换、操作、排序、统计、运算、基本线性代数等
方法可以参考 numpy方法
基本信息
# 一般用np作为numpy的缩写
import numpy as np
# 这里创建了一个数组 之后详细说明
arr = np.array([[[1], [2]], [[3], [4]]], dtype=np.int32)
# 数组的维度
arr.ndim
# 数组的各个维度的长度
arr.shape
# 数组元素个数
arr.size
索引对象
这里要说一个贯穿数据索引的重要概念。无论是原生的python list容器,numpy,还是之后的pandas都会用到。
在原生的python list容器中我们一般会用list[start:end:step]
做列表索引,那么我们用于索引的对象就是start:end:step
即切片对象(slice)。
numpy扩展了可以用于索引的对象。我们可以用任意的序列对象作为索引。比如在numpy中array[1:4]
和array[[1,2,3]]
是等效的。但是在list容器的索引语法中,后面这种写法是非法的。
多维视图
那么上面是单个维度的索引,多维索引只要把单维的堆叠起来就行就行了。
比如arr[first_slice, second_slice, ......]
。
结合下面的例子来理解一下。
注意所以视图的返回都是引用。
但也可也通过这种方式来返回拷贝,newarr = arr[::].copy()
。
快速创建
我们可以用任意指定的shape来创建多维数组。shape即元组或者列表比如(3,4)
就是一个3x4矩阵, [2,3,4]
就是一个2x3x4的三维张量。
# 创建一个全为1的多维数组
np.ones(shape)
# 创建一个全为0的多维数组
np.zeros(shape)
# 创建一个全为7的多维数组
np.full(shape,7)
# 创建一个随机的数组
np.random.random(shape)
# n阶单位方阵即二维多维数组
np.eye(n)
# 二维数组即矩阵对角线填充
np.diag([1, 2, 3])
数组操作
# 运算操作,以加操作为例
result = a - b
result = np.add(a,b) # 跟操作符等效
# 函数操作
np.exp(arr) # e的次数
np.sqrt(arr) # 平方根
np.log(arr) # 对数
a.dot(b) # a点积b
a.T # a的转置
# 比较操作
a == b # 会返回一个由True和False构成的多维数组
# 聚合操作
arr.sum() # 求和
arr.mean() # 求均值
a.corrcoef() # 求协方差
这里有一个容易弄混在于聚合操作,arr.sum()
默认是对所有的元素进行求和操作。但是其实我们还可以指定arr.sum(axis=0)
对某个维度进行求和。
这里以三维张量举个例子:
>>> arr = np.ones((2,3,4))
>>> arr
array([[[ 1., 1., 1., 1.],
[ 1., 1., 1., 1.],
[ 1., 1., 1., 1.]],
[[ 1., 1., 1., 1.],
[ 1., 1., 1., 1.],
[ 1., 1., 1., 1.]]])
>>> arr.sum(axis=0)
array([[ 2., 2., 2., 2.],
[ 2., 2., 2., 2.],
[ 2., 2., 2., 2.]])
>>> arr.sum(axis=1)
array([[ 3., 3., 3., 3.],
[ 3., 3., 3., 3.]])
>>> arr.sum(axis=2)
array([[ 4., 4., 4.],
[ 4., 4., 4.]])
简单来理解的话,对某个axis=n进行聚合操作的话就是把对应shape的第n个维度消去。
比如原本的shape为(2,3,4)
,如果指定axis=0,那么聚合操作的返回shape就是(3,4)
。可以结合上面那个例子来理解。
打卡练习可以看 100 个numpy 练习