我爱编程

NumPy基础:数组和矢量计算

2017-12-13  本文已影响0人  WeirdoSu

Numerical Python简称,高性能科学计算和数据分析的基础包。几乎所有高级工具的构建基础。部分公能如下:

np本身并没有提供很高级的数据分析能力,理解numpy数组以及面向数组的计算有助于更高效的使用类似pandas的工具。

对于大部分数据分析应用而言,最关注的功能主要集中在:

NumPy的ndarray:一种多维数组对象

虽然大多数数据分析工作不需要深入理解numpy,但精通面向数组的编程和思维方式很关键。

创建ndarray:

ndarray的数据类型:

数组和标量之间的运算:

数组可以使不编写循环即可对数据执行批量运算,者通常叫做矢量化。

大小相等的数组之间的任何算数运算都会将运算应用到元素级,数组与标量的算数运算也会应用到元素;

不同大小的数组之间的运算叫做广播(broadcasting)。

基本的索引和切片:

一维数组:

高维数组:

切片索引:

布尔型索引:

花式索引(Fancy indexing):

指利用整数数组进行索引。

数组转置(transpose)和轴对换:

通用函数:快速的元素级数组函数

通用函数(ufunc)是一种对ndarray中的数据执行元素级运算的函数。

利用数组进行数据处理:

用数组表达式代替循环的做法,称作矢量化。比纯python方式快上一两个数量级。

将条件逻辑表达为数组运算:

numpy.where函数是三元表达式 x if condition else y 的矢量化版本:

两个值数组xarryarr,一个布尔数组cond,想要根据cond中的值选取xarryarr的值,TruexarrFalseyarr

数学和统计方法:

可以通过数组上的一组数学函数对整个数组或某个轴向的数据进行统计计算。

用于布尔型数组的方法:

在以上方法中,布尔值会被强制转换成 1(True)0(False)

排序:

唯一化以及其他的集合逻辑:

numpy提供了一些针对一维ndarray的基本集合运算。

In [2]: names = np.array(['Bob', 'Joe', 'Will', 'Joe', 'Joe'])
In [3]: np.unique(names)
Out[3]: 
array(['Bob', 'Joe', 'Will'],
      dtype='<U4')
np.in1d()用于测试一个数组中的值在另一个数组中的成员资格:
In [4]: values = np.array([6, 0, 0, 3, 2, 5, 6])
In [5]: np.in1d(values, [2, 3, 6])
Out[5]: array([ True, False, False,  True,  True, False,  True], dtype=bool)

用于数组的文件输入输出

numpy能够读写磁盘上的文本数据或二进制数据。

将数组以二进制格式保存到磁盘:

np.savenp.load是读写磁盘数组数据的两个主要函数,默认情况下数组是以未压缩的原始二进制格式保存在扩展名为.npy的文件中的:

In [6]: arr = np.arange(10)
In [7]: np.save('some_array', arr)
In [8]: np.load('some_array.npy')
Out[8]: array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
# 通过np.savez可以将多个数组保存到一个压缩文件中,将数组以关键字参数形式传入:
In [9]: np.savez('array_archive.npz', a=arr, b=arr)
# 加载.npz文件时,会得到一个类似字典的对象,对各个数组进行延迟加载:
In [10]: arch = np.load('array_archive.npz')
In [11]: arch['a']
Out[11]: array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
In [12]: arch['b']
Out[12]: array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])

存取文本文件:

线性代数:

线性代数(矩阵乘法、矩阵分解、行列式及其他方阵数学)是任何数组库的重要组成部分。

In [13]: x = np.array([[1.,2.,3.],[4.,5.,6.]])
In [14]: y = np.array([[6.,23.],[-1,7],[8,9]])

In [15]: x.dot(y)
Out[15]: 
array([[  28.,   64.],
       [  67.,  181.]])

In [16]: np.dot(x, y)
Out[16]: 
array([[  28.,   64.],
       [  67.,  181.]])

numpylinalg中有一组标准的矩阵分解运算以及诸如求逆和行列式之类的东西。

随机数生成:

numpy.random模块对python内置的random进行了补充,增加了一些用于高效生成多种概率分布的样本值的函数。

python内置random模块一次只能生成一个样本值,numpy.random模块可以产生大量样本值。

上一篇 下一篇

猜你喜欢

热点阅读