公众号关注 “视学算法”

设为“星标”,第一时间知晓最新干货~

转自https://zhuanlan.zhihu.com/p/26478010

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

Numpy

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函数,可以查看这篇博客:

numpy教程:数学函数和基本统计函数

https://blog.csdn.net/pipisorry/article/details/41214819

自定义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

NumPy基础用法总结相关推荐

  1. NumPy 基础用法

    NumPy 是高性能科学计算和数据分析的基础包. 它是 pandas 等其他各种工具的基础. 主要功能: ndarray 一个多维数组结构, 高效且节省空间 无需循环对整组数据进行快速运算的数学函数 ...

  2. python Numpy 的基础用法以及 matplotlib 基础图形绘制

    python Numpy 的基础用法以及 matplotlib 基础图形绘制 1. 环境搭建 1.1 Anaconda ​ anaconda 集成了数据分析,科学计算相关的所有常用安装包,比如Numo ...

  3. pandas object转float_数据分析篇 | Pandas基础用法6【完结篇】

    这是最后一篇,至此Pandas系列终于连载完了,有需要的也可以看看前面6篇,尽请收藏. 数据分析篇 | Pandas 概览 数据分析篇 | Pandas基础用法1数据分析篇 | Pandas基础用法2 ...

  4. dubbo官方文档中文_Pandas中文官方文档:基础用法5

    本文授权转载自Python大咖谈禁止二次转载 大家好,我是老表 阅读文本大概需要 16 分钟 建议从头开始学习,本系列前四篇 Pandas中文官方文档:基础用法1 Pandas中文官方文档:基础用法2 ...

  5. pandas库Series使用和ix、loc、iloc基础用法

    1. pandas库Series基础用法: 直接贴出用例: 1. 构造/初始化Series的3种方法: (1)用列表list构建Series import pandas as pd my_list=[ ...

  6. Pandas中文官档 ~ 基础用法1

    呆鸟云:"在学习 Python 数据分析的过程中,呆鸟发现直接看官档就是牛逼啊,内容全面.丰富.详细,而 Python 数据分析里最核心的莫过于 pandas,于是就想翻译 pandas 官 ...

  7. pandas object转float_Pandas中文官档~基础用法6

    呆鸟云:"这一系列长篇终于连载完了,还请大家关注 Python 大咖谈,这里专注 Python 数据分析,后期呆鸟还会给大家分享更多 Pandas 好文." 数据类型 大多数情况下 ...

  8. 《利用python进行数据分析》读书笔记--第四章 numpy基础:数组和矢量计算

    第四章 Numpy基础:数组和矢量计算 第一部分:numpy的ndarray:一种多维数组对象 实话说,用numpy的主要目的在于应用矢量化运算.Numpy并没有多么高级的数据分析功能,理解Numpy ...

  9. numpy基础(1)

    numpy基础(1) 以下教程涉及到的文字均来自于莫烦Python.有一个坑需要避免下:二维数组需要多加一个括号,要不会报错. numpy属性 ndim:维度 shape:行数和列数 size:元素个 ...

最新文章

  1. 生物信息学、系统生物学 期刊 会议
  2. RED HAT LINUX 9.0的安装文本模式(2)
  3. 如果我们预先得知未来某一刻会因为此刻的决定而失败,那是否还会继续努力?
  4. 计算机课玩手机检讨500,玩手机检讨书500字
  5. 2016网络安全***赛记录
  6. 大型DCI网络智能运营实践
  7. [XMOVE自主设计的体感方案] XMove Studio管理系统(二)应用开发API简要介绍
  8. 如何获取filecoin_获得Filecoin币有哪些条件?
  9. potplayer播放器的下载与截图配置
  10. SWIFT4.0学习01 - 函数的命名、调用以及注意事项
  11. mysql 修改这段长度_MySQL中使用group_concat()函数数据被截取(有默认长度限制),谨慎!...
  12. 计算机辅助个人当面访问,优课联盟——共建共享,学分互认
  13. MS17-010(永恒之蓝) 漏洞检测及利用教程
  14. 华东交通大学计算机全国排名,华东交通大学世界排名、中国排名、专业排名
  15. minecraft服务器stats文件夹,[教程]Minecraft 文件夹目录索引及各部分作用
  16. linux执行 ifconfig 命令 eth0没有IP地址(intet addr、Bcast、Mask)
  17. server2003 必要的系统优化和安全设置
  18. Python调用Rasa API服务进行连续对话
  19. WIN7中任务栏,菜单栏和工具栏的基本设置
  20. eclipse工具的使用

热门文章

  1. Matlab与线性代数 -- 矩阵的左除
  2. 【ACM】杭电OJ 1789(Doing Homework again)
  3. 冬奥会夺金的背后杀手锏,竟是位 AI 虚拟教练
  4. 深入浅出,机器学习该怎么入门?
  5. CSDN 星城大巡礼,长沙“科技之星”年度企业评选正式开启
  6. 黄皓之后,计算机科学上帝Don Knuth仅用一页纸证明布尔函数敏感度猜想
  7. 初学者的机器学习入门实战教程!
  8. VS Code 正在统治代码编辑器领地!
  9. “GAN之父”:当初为了深度学习买GPU,现在后悔没多挖点比特币
  10. 如何设计一颗40PFLOPS量级的AI芯片?