跟老齐学python怎么样_学习编程|跟老齐学Python数据分析:NumPy基础和应用

第0章

1. 安装基本库

打开终端,依次输入如下安装指令:

$ sudo pip3 install numpy

$ sudo pip3 install scipy

$ sudo pip3 install matplotlib

$ sudo pip3 install pandas

$ sudo pip3 install sympy

$ sudo pip3 install ipython

$ sudo pip3 install jupyter

安装完毕会显示是否安装成功,或者用户输入python3后再输入import 库名 看是否报错来检验是否安装成功。

2.使用Jupyter 使交互更友好

执行如下命令:

$ jupyter notebook

启动Jupyter Notebook,然后在界面的New下拉按钮中选Python3,这时会创建一个新的Tab,这便是我们的工作界面注:本书中使用的有关数据分析的库针对Python3,所有代码基于Ubuntu 16.04操作系统。

第1章 NumPy 基础和应用

NumPy基础

1.创建数组

数组也是对象,与列表不同,数组的的元素的类型必须是相同的,且数组一旦确定,其轴的数量就不能再变化。创建数组大致有以下三种方法。

1.1 np.array()创建数组

1.1.1创建一维数组

Array1=np.array([1,2,3,4]);这条语句创建了一个有四个元素(整数)组成的一维数组。

Array=np.array(Array1,dtype=float) 这条语句创建了一个有四个元素(整数)组成的一 维数组,它的各个元素是为浮点数。

当定义数组时未显式指定dtype时,NumPy会自行推断元素类型。

1.1.2 创建二维数组

Array2=np.array([[1,2,3,4],[1,2,3,4]]); 此处创建了一个二维数组。

Array2=np.array([1,2,3,4],ndim=2);此处创建的也是一个二维数组

1.1.3 创建三维数组

Array3=np.array([[1,2,3,4],[1,2,3,4]]);

Array4=np.array([[4,5,16,7,3],[5,2,3,8]]);

MutiArray=np.array([Array3,Array4]),此处的MutiArray便是一个三维数组。注意: 当向np.array()中传入列表的时候,列表中各个元素的长度应一致,否则系统可能不会报错,但是最终得到的数组对象可能并不是我们想要的。如定义时使用arrayTest=np.array([[1,2,3],[4,5,6,7],[11,12]]);输出arrayTest的时候,其结果如下:array([list([1,2,3]),list(4,5,6,7),list(11,12)]);

1.2 用函数创建数组

1.2.1 np.zeros((shape,dtype=arrayType,order=’C’)) 它创建一个完全由0组成的数组,shape是以元组形式声明此数组的形状,arrayType是元素的类型,order后的值是其在数据存储区的排列的格式,‘C’是按行排,‘F’是按列排,默认order=’C’.

ArrayTest=np.zeros((2,3),dtype=float,order=’C’);定义了一个输出如下所示的二维数组:

array([[0.,0.,0.],[0.,0.,0.]]);

1.2.2下表中列出的是NumPy中创建特殊数组的函数:

1.2.3 除了上述的函数,还可以用dir(np)命令显示出的from开头的方法创建数组,如frombuffer、fromfile、fromfunction、fromregex、fromstring等。

1.3 使用np.dtype()创建自定义类型的数组

首先,我们创建自定义类my_type如下所示

my_type=np.dtype({“names”:[‘book’,’version’],”formats”:[‘S40’,np.int]});

或者

my_type=np.dtype([(‘book’,’S40’),(‘version’,np.int)]);

然后,我们就可以定义元素为my_type类型的数组了:

my_books=np.array([“bookname1”,1],[“bookname2”,2],dtype=my_type)

2. 查看数组属性

2.1 查看当前对象属性和方法:dir(array)或array?

2.2数组元素的类型:array.dtype

2.3数组的形状 array.shape

2.4数组的维度 array.ndim

3. 数组的轴

生活中,我们描述矩阵的形状用一维、二维和三维等等,对应的其大小会用n1 X n2 X n3……去描述,numpy中的数组就通过ndim和shape来为我们描述一个数组的维度和大小。

下图描述了了一个二维数组的维度和大小:

同样的道理,为了能唯一访问到高维数组中某个元素,必须指明每一个维度的值,我们可以试试对于上述2维数组用不同维度去访问,其中最后两种访问形式是等价的:

4. 快速生成数组

一般的做法是我们生成一维数组,然后通过reshape方法将其变成我们想要的形状的数组,而一维数组的生成可以用arange函数(生成指定范围内的整数数组)、linspace函数(在一定范围内生成指定个数的小数数组)。

5. 切片

Python中list对象一个很重要的特征就是切片,同样的,在numpy的数组也支持切片,但是list的切片生成的是原对象的一个copy,numpy数组生成的 切片中的元素是共享内存的。

6. 数组的变形

之前我们已经用过了reshape方法去改变一个数组的形状,但我们也可以通过改变数组对象的shape属性来改变数组的形状。

反过来,如果我们要将高维数组变成一维数组可以通过flatten()和reval()函数,不过前者是返回原对象的一个copy,后者却是和父本的元素共享同一个内存空间。

7. 数组的组合和分割

在我们将来进行数组分析的时候,可能会将不同的数组进行组合和分割,所以,numpy也为我们准备了对应的函数。

hstack()函数内帮我们将多个数组沿1轴(水平方向)的方式连接起来,其作用类似于在concatenate函数中指明axis=1(在numpy中,很多操作都是和轴有关的,axis=0表示0轴,即按行的方式)。同样的道理,我们可以用vstack()函数将数组沿0轴(垂直方向)连接起来,下图只给出水平方向的实例,大家可以去试试垂直方式的用法。

会了组合,那么也就不应该忘了分割,即split()函数,同样的,必须要指明该函数的按什么轴去分割,即axis的值,当axis=0时,等价垂直分割函数vsplit();当axis=1时,等价水平分割函数hsplit()。

8. 数组的改编

作者把“改编”定义为包括添加、插入、删除这3个操作的统一说法,numpy中这3个操作分别对应于append()、insert()和delete()3个函数。使用这3个函数如果不声明轴axis的值,生成的将是改编后数组的一维数组形式,无论之前是多少维的,此时,就相当于改编后又调用了flatten()函数,具体用法可以参照下图:

9. 数组的运算

Numpy的诞生本就为了科学计算和数值处理,所以,我们想对整个数组进行加减乘除等运算时,直接把每个数组变量看成一个普通的数字就行了。

不仅是简单的加减乘除,他还支持指数运算、对数运算、三角函数等多种运算(下图最后一个事例因为计算了log10(0)发生了错误……)

NumPy简单统计应用

NumPy中提供了很多的函数,就好比一个工具箱。

1. 生成正态分布数据

完整的函数表达式:

umpy.random.normal( loc=0,scale=1.0,size=None )

loc:

equation?tex=%5Cmu

scale:

equation?tex=%5Cdelta

size: None

2. 简单的统计函数

例:

Np.mean(变量)

3. 矩阵

创建矩阵:np.mat()和np.matrix();

例:

A = np.mat(a)

B = np.mat(b)

A * B

4. 综合应用实例

(1) 多项式

在数学中,通常用如下形式表示多项式( Polnomial )

创建多项式

equation?tex=f%28x%29%3Dx%5E2-2x%2B1

a = np.[array([1, -2, 1])

p = np.pooly1d(a)

p

计算f(1);

输出 p(1)

5. 解线性方程组

本书1.6节提到了 numpy.linalg 模块, 这是专门针对线性代数的模块,它提供了解线性代数组的方法。

使用

numpy.linalg.solve()

通常, 用下面的方式表示线性方程组;

例:

a = np.array([[3, 1], [1, 2]])

b = np.array([9, 8])

x = np.linalg.solve(a, b)

x

out: array([2., 3.])

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值