《python for data analysis》笔记三--Numpy基础:arrays和向量化计算2

继续Numpy基础...

1. Fancy Indexing

指的是用一个整数array来当做index下标,比如:arr[[4,3,0,6]] ,中间的那个array就是一个fancy indexing形式。也可以是负数形式,如arr[[-3,-5,-7]];

当传进的参数是multiple index arrays时,会选择各个array的相同下标,做为一个下标,比如:

arr = np.arange(32).reshape((8,4))

arr[[1,5,7,2],[0,3,1,2]]

会把[1,0]做为一个index,[5,3],[7,1],[2,2]分别做为下标取对应的元素值;

维数再高也是类似,当然,也可以缺省一个下标,表示,这一维的所有元素都取出,或者在上面采用slice indexing。

另外,还可以利用下标取值,并打乱其在某维度的顺序,比如:


可以看到,取出了1,5,7,2维度的所有值,并在那一维中使用顺序[0,3,1,2]做为新的顺序;

上述也可以用np.ix_() 函数实现,该函数传递两个参数,第一个做为要选取的1D arrays index,第二个表示1D中的顺序;

注意:fancy indexing和slicing不同,它通常将元素拷贝到新的array中。

 

2. Transposing Arrays and Swapping Axes

用arr.T来表示转置矩阵;

可以用np.dot(arr.T,arr)来计算两矩阵的内积(inner product) XTX;

arr.swapaxes(a,b):输入两个轴的编号,将两个轴转置,当arr为2维时,输入0,1;即表示arr.T;当为高维时,需要考虑它会出现什么结果。swapaxes与slicing类似,不返回新的array。

arr.transpose((...)):输入一个List表示转置后,之前的各个轴所在的位置;如arr.transpose((1,0,2))表示将轴0和轴1交换,等价于arr.swapaxes(0,1)。通常transpose()可以看做是一个或多个swapaxes()的结果。

 

3. Universal Functions: Fast Element-wisearray functions

通用函数,是一些对元素进行数学操作的函数,可以看出是vectorization的操作;如sqrt和exp;


常用的一元ufuncs函数:


常用的二元ufuncs函数:


4. Data Processing using Arrays

使用Numpy的arrays可以让本来需要写许多loops的操作可以用array表示,这种以array表示来替代loops的操作通常叫做vectorization;通常情况下,使用向量化的操作要比单纯的用python语言来计算速度要快上数倍。

np.meshgrid():给定两个1D的array,生成两个2D的matrices,大小为m*n,n为第一个array的长度,m为第二个array的长度;第一个matrix以第一个array为行,构造m行,为m*n矩阵;第二个matrix以第二个array为列,构造n列,为m*n矩阵;如:

x = np.arange(3)

y = np.arange(2)

xs, ys = np.meshgrid(x,y)

结果为:


遇到个问题:

matplotlib.pyplot 的Imshow()显示不出来... 不知道什么原因,没有错误...后面遇到这个绘图的东东还要再多学习呀...

 

5. Expressing Conditional Logic as ArrayOperations

np.where函数可以表达这种形式的操作:x ifcondition else y比如:


如果采用原始的python表达:


可以发现,不仅会很慢,而且会出错,另外,还不好用在多维array中;而如果采用np.where:


可以很节省时间和代码量,并且where的第2,3个参数可以不是array类型;np.where类似于三元操作符()?a:b;

np.where的典型应用是在数据分析中,基于一个array生成一个新的array;如下所示:


可以看到,传递至np.where的参数形式多样;

另外,还可以用np.where表示一个嵌套的判断,比如:


可以写成


事实上,根据bool类型的特性,这个式子还可以写成 result = 1*cond1 + 2*cond2 +3*(not(cond1|cond2)) 。

 

6. Mathematical and Statistical Methods


np.sum(arr)和arr.sum()等价;

可以用arr.mean(axis=1)来计算指定轴上的统计量;通常2维下,0表示列,1表示行;

其中argmin,argmax表示的是最小值最大值的下标;

cumsum:累加,cumsum(0)表示按列累加(比如第3行第1列的元素为第1,2,3行,第1列的元素值之和);为1表示按行累加;

cumprod相同,累乘,初始乘以1;

 

 


7. Methods for Boolean Arrays

上述操作的Boolean值通常被置为1(True)和0(False),sum函数通常可以用来计算True出现的次数;如:


还有两个有用的函数any和all,any用来判断array中是否存在True值;all用来判断array中是否所有值都为True,如:


这三个函数同样适用于非Boolean值的array,非零值为True,零值为False。

 

8. Sorting

ndarray中有sort函数,可以对array进行排序,调用方法为array.sort(axes);当为一维时,axes可不指定;当为多维时,如果不传入axes值,则默认对所有维度上元素进行排序,且重新转换为array的shape;当传入axes值时,可指定排序轴,比如二维情形下,0表示按列排序、1表示按行排序;如:


 

9. Unique and Other Set Logic

Numpy中有许多基本的1维集合操作函数,最常用的是np.unique,该函数返回排序后的Unique values array;如:


该函数功能等价于纯python语言中的sorted(set(names))

 

函数np.in1d(array,array),测试第一个array中的元素是否在第二个array中,并返回一个boolean array,如:

 

另外一些函数:如下表所示:


其中setxor1d(x,y)是指元素只在一个array中出现的集合;相当于setdiff1d( union1d(x,y), intersect1d(x,y))


10. File Input and Output with Arrays

Numpy可以读取或保存数据到磁盘,以文本形式或者二进制形式;

1)以二进制形式将array存储到磁盘上:

np.savenp.load是二进制保存和读取数据的函数,在磁盘上的文件后缀名为.npy格式;如:


还有一个可以保存multiplearrays到一个文件的函数np.savez(filename, *arg,s **kwds),后缀是.npz;如果不指定kwds,则系统会默认为其赋array名,比如:


可以看到默认的array名为arr_1,arr_0;可以用=号指定array名,如:


可以根据这个array名字来读取相应的array,如:


2)以文本形式存储和读取数据

简单的操作:


事实上,np.savetxt()函数有许多参数,如下图所示:


其中,fmt参数是一些格式化参数,暂时不学习,后面慢慢熟悉。

 

11. Linear Algebra

Numpy提供一些线性代数的操作函数,比如dot()实现两个矩阵相乘等,如:


numpy.linalg 模块包含一系列线性代数操作函数,这个模块和MATLAB与R一样,都是采用工业标准Forttran库实现的。下图是一些线性代数函数:


其中qr是QR分解,将一个矩阵分解为一个正交矩阵orthogonal matrix和一个上三角矩阵right triangular matrix;svd是奇异值分解,具体参考线性代数;

 

12. Random Number Generation

numpy.random是python本身random模块的扩充,可以有效生成不同概率分布下的样本值array;如normal分布:


Python的内置random模块仅在一个时间生成一个样本值,而numpy.random模块则不是,可以通过下面的实验看出numpy.random模块在生成大量样本值的时候较快;


下表给出了Numpy.random模块中的一些函数:


其中chisquare是卡方分布;

 

 

这本书主要是用 pandas 连接 SciPy NumPy,用pandas做数据处理是Pycon2012上一个很热门的话题。另一个功能强大的东西是Sage,它将很多开源的软件集成到统一的 Python 接口。, Python for Data Analysis is concerned with the nuts and bolts of manipulating, processing, cleaning, and crunching data in Python. It is also a practical, modern introduction to scientific computing in Python, tailored for data-intensive applications. This is a book about the parts of the Python language and libraries you’ll need to effectively solve a broad set of data analysis problems. This book is not an exposition on analytical methods using Python as the implementation language., Written by Wes McKinney, the main author of the pandas library, this hands-on book is packed with practical cases studies. It’s ideal for analysts new to Python and for Python programmers new to scientific computing., Use the IPython interactive shell as your primary development environment, Learn basic and advanced NumPy (Numerical Python) features, Get started with data analysis tools in the pandas library, Use high-performance tools to load, clean, transform, merge, and reshape data, Create scatter plots and static or interactive visualizations with matplotlib, Apply the pandas groupby facility to slice, dice, and summarize datasets, Measure data by points in time, whether it’s specific instances, fixed periods, or intervals, Learn how to solve problems in web analytics, social sciences, finance, and economics, through detailed examples
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值