原标题:NumPy库入门教程:基础知识总结

视学算法 | 作者

知乎专栏 | 来源

numpy可以说是 Python运用于人工智能和科学计算的一个重要基础,近段时间恰好学习了numpy,pandas,sklearn等一些Python机器学习和科学计算库,因此在此总结一下常用的用法。

1

numpy数组(array)的创建

通过array方式创建,向array中传入一个 list实现

一维数组的创建:

二维数组的创建:传入一个嵌套的list即可,如下例:

通过arange创建数组:下例中创建一个0~1间隔为0.1的行向量,从0开始,不包括1,第二个例子通过对齐广播方式生成一个多维的数组。

通过linspace函数创建数组:下例中创建一个0~1间隔为1/9的行向量(按等差数列形式生成),从0开始,包括1.

通过logspace函数创建数组:下例中创建一个1~100, 有20个元素的行向量(按等比数列形式生成),其中0表示10^0=1,2表示10^2=100,从1开始,包括100

生成特殊形式数组:

生成全0数组(zeros函数),生成全1数组(ones函数), 仅分配内存但不初始化的数组(empty函数)。

注意要 指定数组的规模(用一个元组指定),同时要指定元素的类型,否则会报错

生成随机数组

通过frombuffer,fromstring,fromfile和fromfunction等函数从 字节序列、文件等创建数组,下例中生成一个9*9乘法表

2

显示、创建、改变的数组元素

的属性、数组的尺寸(shape)等

3

改变数组的尺寸(shape)

reshape方法,第一个例子是将43矩阵转为34矩阵,第二个例子是将行向量转为列向量。注意在numpy中, 当某个轴的指定为-1时,此时numpy会根据实际的数组元素个数自动替换-1为具体的大小,如第二例,我们指明了c仅有一列,而b数组有12个元素,因此c被自动指定为12行1列的矩阵,即一个12维的列向量。

4

元素索引和修改

简单的索引形式和切片:

当使用布尔数组b作为下标存取数组x中的元素时,将收集数组x中所有在数组b中对应下标为True的元素。使用布尔数组作为下标获得的数组不和原始数组共享数据空间,注意这种方式只对应于 布尔数组(array), 不能使用布尔列表(list)。(附注:当布尔数组的长度与被索引的数组的长度短时,不足的部分都当作False)

利用条件进行索引:利用不等式等进行索引

多维数组的索引和切片(右边框图中的颜色和左边的指令的颜色相对应):

同样的,可以采用 bool型的方式对数组进行索引和切片操作

其实多维数组的索引还是很好理解的,例如下例中,我们可以看到对于一个张量,也就是b,对其索引是,[i,j,k]中的i表示选择第几个二维数组, 然后j表示取二维数组中的第几个行向量,k表示取行向量中的第几个元素。

5

ufunc操作

ufunc是universal function的缩写, 它是一种能对数组的每个元素进行操作的函数。numPy内置的许多ufunc函数都是在C语言级别实现的,因此它们的计算速度非常快。下面给一个计算sin函数(sin函数计算数组中全部元素的sin值)的小实例:

四则运算符可以直接用于数组(一维或多维)计算:

比较操作也可直接进行,如下,比较x1和x2各对应元素的大小,返回的是一个bool型数组。

可用的操作符有 ‘==’,‘!

=’,‘’,‘<=’,‘>=’等。另外可以使用数组的any或all方法。 只要数组中有一个值为True,则any返回True;而只有数组的全部元素都为True,all才返回True。

想要了解更多的numpy自带的ufunc函数,可以查看这篇博客:

自定义ufunc函数:frompyfunc(func,nin,nout) 函数可以将计算单个值的函数转换成一个可对数组中每个元素进行计算的ufunc函数。 其中nin是输入func的参数的个数,nout是func返回值的个数。如下例。

reduce方法(与 Python的reduce函数类似,其沿着axis轴对array进行操作)

accumulate方法(其作用和reduce方法类似,但是会保存中间结果)

outer方法(对其两个参数数组的每两对元素的组合进行运算,计算外积):若数组a的维数为M,数组b的维数为N, 则ufunc函数op的outer方法对a、b数组计算所生成的数组c的维数为M+N,c的形状是a、b的形状的结合。例如a的形状为(2,3),b的形状为(4,5),则c的形状为(2,3,4,5)。

6

广播操作

广播是针对形状不同的数组的运算采取的操作。当我们使用ufunc函数对两个数组进行计算时,ufunc函数会对这两个数组的对应元素进行计算,因此它要求这两个数组有 相同的大小(shape相同)。如果两个数组的shape不同的话(行列规模不等),会进行如下的广播(broadcasting)处理:

1)让所有输入数组都向 其中shape最长的数组看齐,shape中不足的部分都通过在前面加1补齐。因此输出数组的shape是输入数组shape的各个轴上的最大值(往最大轴长上靠)。

2)如果输入数组的某个轴和输出数组的对应轴的长度相同或者其长度为1时,这个数组能够用来计算,否则出错。

3)当输入数组的某个轴的 长度为1时,沿着此轴运算时都用此轴上的第一组值。

感觉说的不太明白,于是还是用实例说话好了。

7

矩阵运算

矩阵乘法(dot乘法, 注意要符合矩阵乘法规则)

内积(inner,计算向量/矩阵内积):和dot乘积一样,对于两个一维数组,计算的是这两个数组对应下标元素的乘积和; 对于多维数组a和b,它计算的结果数组中的每个元素都是数组a和b的最后一维的内积,因此数组a和b的最后一维的长度必须相同。

计算公式为:

inner(a, b)[i,j,k,m] = sum(a[i,j,:]*b[k,m,:])

外积(outer,计算外积):只按照一维数组进行计算,如果传入参数是多维数组,则先将此数组展平为一维数组之后再进行运算。outer乘积计算的列向量和行向量的矩阵乘积。

解线性方程组(solve):solve(a,b)有两个参数a和b。 a是一个N*N的二维数组,而b是一个长度为N的一维数组,solve函数找到一个长度为N的一维数组x,使得a和x的矩阵乘积正好等于b,数组x就是多元一次方程组的解。

8

文件存取

(假设有数组array为a,假定类型为int32)

a.tofile(file_name) ,保存a到file_name文件中,file_name为字符串类型,如‘a.txt’等;从文件中读回a数组时需要指明类型,如:b=np.fromfile(file_name,dtype=np.float)

时会报错,正确的使用方式是:

b=np.fromfile(file_name,dtype=np.int32)

save和load方法(写入文件和从文件读回都不需要指明类型,存储文件类型为npy格式文件):

np.save(“a.npy”, a) # 将array a存入a.npy文件中c = np.load( “a.npy” ) # 从a.npy文件中读回array a

savetxt和loadtxt方法(保存为txt格式文件):

np.savetxt(“a.txt”, a) # 将array a存入a.txt文件中np.loadtxt(“a.txt”) # 从a.txt文件中读回array a返回搜狐,查看更多

责任编辑:

python向量计算库教程_NumPy库入门教程:基础知识总结相关推荐

  1. Nginx教程(一) Nginx入门教程

    Nginx教程(一) Nginx入门教程 1 Nginx入门教程 Nginx是一款轻量级的Web服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,并在一个BSD-like协议下发行.由 ...

  2. Redis教程(一) Redis入门教程

    Redis教程(一) Redis入门教程 1 Redis入门教程 Redis是一个 Key-Value存储系统.和 Memcached类似,它支持存储的 value类型相对更多,包括 string(字 ...

  3. WMI 使用教程_.NET 入门教程

    WMI 使用教程_.NET 入门教程 先介绍一下WMI 相关知识:  什么是WMI 呢? Windows 管理规范 (Windows Management Instrumentation ),它的主要 ...

  4. Docker教程(一) Docker入门教程

    Docker教程(一) Docker入门教程 本文链接:https://blog.csdn.net/yuan_xw/article/details/51935278 Docker教程(一) Docke ...

  5. AFNnetworking快速教程,官方入门教程译

    AFNnetworking快速教程,官方入门教程译 分类: IOS2013-12-15 20:29 12489人阅读 评论(5) 收藏 举报 afnetworkingjsonios入门教程快速教程 A ...

  6. Kafka教程(一)Kafka入门教程

    Kafka教程(一)Kafka入门教程 1 Kafka入门教程 1.1 消息队列(Message Queue) Message Queue消息传送系统提供传送服务.消息传送依赖于大量支持组件,这些组件 ...

  7. python基础一入门必备知识-Python数据分析入门必备基础知识

    今天,老师要带大家解数据分析的定义.核心思路.应用领域以及开发流程,向大家全方位展示数据分析入门必备基础知识,全都是干货哦!虽然看完本文,不能让大家立马变身为一名数据分析师,但是能让大家对数据分析有一 ...

  8. 计算机java语言教程,计算机JAVA教程二讲Java语言基础知识.doc

    计算机JAVA教程二讲Java语言基础知识 2.1简单数据类型 2.1.1 标识符和保留字 1.标识符 程序员对程序中的各个元素加以命名时使用的命名记号称为标识符(identifier).Java语言 ...

  9. 软考 程序员教程-第三章 数据库基础知识

    软考 程序员教程-第三章 数据库基础知识 第三章 数据库基础知识 3.1 基本概念 数据库系统(DataBase System,DBS)由数据库(DataBase,DB).硬件.软件和人员4大部分组成 ...

  10. JAVA转GO第一步,我跟着教程看了一遍基础知识

    ** JAVA转GO第一步,我跟着教程看了一遍基础知识 ** 时间飞逝,转眼间工作快满5年了,看着同期毕业的朋友们大部分都选择了稳定的公务员.事业单位.学校的老师,前途大好.而我毕业后一直留在互联网公 ...

最新文章

  1. [GWCTF 2019]pyre.pyc [CISCN2018]2ex
  2. DNN出错:The compiler failed with error code 1.
  3. 如何查看cplex的help文档_用摹客,写出更好的产品文档
  4. Faste R-CNN的安装及测试
  5. mysql安装mac 压缩包_MAC mysql安装及设置
  6. [转载] python中的Numpy库入门
  7. 队列Q----双数组下标查找
  8. php mktime 2037,phpmktime计算两时间之差_PHP教程
  9. 【秋招面试】面试准备(一面准备)
  10. FAT和FAT32文件系统的原理
  11. 什么是时延?(延迟)
  12. QQ会员注册完整代码
  13. Chrome终极全屏模式Kiosk
  14. android远程控制灯光,11款可用手机远程控制的智能灯
  15. ht城市介绍人口数量Html,城市人口热力图 城市热力图查询
  16. 996下的最后一根稻草
  17. 深善扶贫:深圳弘法寺启动“春风谷雨”送温暖行动
  18. 部署CITA和区块链浏览器以及智能合约
  19. macOS 入门指南
  20. 攻防世界密码学 浅尝

热门文章

  1. 如何学习数据挖掘和数据科学的7个步骤
  2. Python学习(四)cPickle的用法
  3. LeetCode简单题之删除字符使字符串变好
  4. SSM框架整合教程(2020最新版)
  5. Tengine Web服务器概述
  6. 将代码生成器带入TVM
  7. TinyML-TVM是如何驯服Tiny的(下)
  8. 2021年大数据Hadoop(八):HDFS的Shell命令行使用
  9. Docker核心技术之Dockerfile
  10. TypeError: Total() missing 1 required positional argument: ‘self‘