1094 字
5 分钟
NumPy论文都已经登上了Nature,Pythoneer会用了吗?
背景
NumPy(Numerical Python)诞生已经过去了 15 年,前一段时间NumPy 核心开发团队的论文终于发表,详细介绍了使用 NumPy 的数组编程(Array programming),并且登上了Nature 。
NumPy 是什么?它是大名鼎鼎的使用 Python 进行科学计算的基础软件包,是 Python 生态系统中数据分析、机器学习、科学计算的主力军,极大简化了向量与矩阵的操作处理。
- 功能强大的 N 维数组对象
- 精密广播功能函数
- 集成 C/C++ 和 Fortran 代码的工具
- 强大的线性代数、傅立叶变换和随机数功能
在平时数据处理中,大部分人用的都是Pandas,用Numpy的场景可能比较少,但是Pandas是基于Numpy实现的更高级的库,使大家用起来更方便。但在做深度学习时用Numpy比较多,比如:图像处理,图片里面其实都是Numpy数组;音频处理;文本处理等等。
下面为大家介绍一些Numpy的常用基础
Numpy基础
- 安装
由于Numpy是第三方库,默认是不集成在Python里面,所以就需要手动安装一下: 如果你安装的是Anaconda,那么就不用再安装了,请忽略 如果你是从官方网站下载的Python,那么你就需要手动安装一下这个库
#指定阿里云镜像,安装更快pip install numpy -i https://mirrors.aliyun.com/pypi/simple/- 导入
默认成规,numpy导入后命名为np,所以在python脚本(程序)里面看见np一般都是代表numpy
import numpy as np- 认识Ndarray
计算机里面能计算的就是数字,也就是数学里面的各种数字,我们都知道数学里面的数组可以有多层,也就是多维,1维就是向量,2维就是矩阵,3维就是坐标轴构成的空间(形象理解),但体现在numpy中就是N 维数组对象ndarray,它是一系列同类型数据的集合。
1维:
>>> import numpy as np>>> a=np.array([1,2,3,4])>>> print(a)[1 2 3 4]>>> type(a)<class 'numpy.ndarray'>>>> a.ndim12维:
>>> import numpy as np>>> b=np.array([[1,2,3],[4,5,6]])>>> print(b)[[1 2 3] [4 5 6]]>>> type(b)<class 'numpy.ndarray'>>>> b.ndim2- 切片和索引
切片、索引与python内置的列表、字符串的切片和索引基本一样,如果理解了列表的切片和索引,那么ndarray对象就不在话下
>>> import numpy as np>>> a=np.arange(10)>>> print(a)[0 1 2 3 4 5 6 7 8 9]>>> type(a)<class 'numpy.ndarray'>>>> a.ndim1>>> a[:5]array([0, 1, 2, 3, 4])>>> a[7:]array([7, 8, 9])>>> a[3:6]array([3, 4, 5])>>> a[::2]array([0, 2, 4, 6, 8])>>> a[::-1]array([9, 8, 7, 6, 5, 4, 3, 2, 1, 0])
>>> a[0]0>>> a[5]5- 数组操作
修改数组形状
>>> import numpy as np>>> a=np.arange(10)>>> print(a)[0 1 2 3 4 5 6 7 8 9]>>> type(a)<class 'numpy.ndarray'>>>> a.ndim1>>> b=a.reshape(5,2)>>> print(b)[[0 1] [2 3] [4 5] [6 7] [8 9]]>>> b.ndim2>>> c=a.reshape(2,5)>>> print(c)[[0 1 2 3 4] [5 6 7 8 9]]>>> c.ndim2数组转置
>>> import numpy as np>>> a=np.arange(12).reshape(3,4)>>> print(a)[[ 0 1 2 3] [ 4 5 6 7] [ 8 9 10 11]]>>> np.transpose(a)array([[ 0, 4, 8], [ 1, 5, 9], [ 2, 6, 10], [ 3, 7, 11]])>>> a.Tarray([[ 0, 4, 8], [ 1, 5, 9], [ 2, 6, 10], [ 3, 7, 11]])数组连接
concatenate、stack、hstack、vstack这个几个函数均是数组连接,原理基本都一样,只要理解了其中一个,其他的都很好理解,这里只介绍concatenate
>>> import numpy as np>>> a=np.array([[1,2],[3,4]]... )>>> b=np.array([[5,6],[7,8]])>>> np.connp.concatenate( np.conj( np.conjugate( np.convolve(>>> np.concatenate([a,b],axis=0) #沿着0轴拼接array([[1, 2], [3, 4], [5, 6], [7, 8]])>>> np.concatenate([a,b],axis=1) #沿着1轴拼接array([[1, 2, 5, 6], [3, 4, 7, 8]])修改数组维度
>>> import numpy as np>>> x=np.array([1,2])>>> np.expand_dims(x,axis=0)array([[1, 2]])>>> np.expand_dims(x,axis=1)array([[1], [2]])>>> y=np.array([[1,2]])>>> np.squeeze(y) #从给定数组的形状中删除一维,当前维必须等于1array([1, 2])- 数组计算
>>> import numpy as np>>> a1=np.array([1,2,3,4])>>> a2=np.array([5,5,5,5])>>> a1+a2array([6, 7, 8, 9])>>> np.add(a1,a2)array([6, 7, 8, 9])>>> a1-a2array([-4, -3, -2, -1])>>> np.subtract(a1,a2)array([-4, -3, -2, -1])>>> a1*a2array([ 5, 10, 15, 20])>>> np.multiply(a1,a2)array([ 5, 10, 15, 20])>>> a1/a2array([0.2, 0.4, 0.6, 0.8])>>> np.divide(a1,a2)array([0.2, 0.4, 0.6, 0.8])历史相关文章
以上是自己实践中遇到的一些问题,分享出来供大家参考学习,欢迎关注微信公众号DataShare,不定期分享干货