[TOC]
*****
# 1. Numpy科学计算
numpy 是 python科学计算的核心库。PYTHON里涉及到科学计算的包括Pandas,sklearn等都是基于numpy进行二次开发包装的。numpy功能非常强大,和scipy构建了强大的PYTHON数理计算功能,函数接口丰富复杂。
![](https://img.kancloud.cn/48/8d/488dce7371d5b8568e349ffce9cd2aa6_751x184.png)
* 数组的定义和应用
* 数组元素的索引选取
* 数组的计算
![](https://img.kancloud.cn/2a/28/2a2878ca85979ff60d234cf69c36533d_1115x401.png)
## 数组:Arrays
array用来**存储同类型的序列数据**,能够被非负整数进行索引。 维度的数量就是array的秩(rank)。
我们可以通过python的列表来创建array,并且通过方括号进行索引获取元素
```
import numpy as np
a = np.array([1,3,4,6,10])
```
![](https://img.kancloud.cn/0f/25/0f259caef625390256c04b086abd869f_325x73.png)
*****
```
#有五个元素
print(a.size)
# 是一维的
print(a.shape)
# 按索引取元素
print(a[2])
```
![](https://img.kancloud.cn/69/22/692201567bd8072a05c5098c213a8e75_67x71.png)
*****
**高维数组的创建**
对于多维数组的理解,看《利用Python进行数据分析》的4.1.4小节
![](https://img.kancloud.cn/64/a0/64a0b7a1ffe714ff18e9d9e68d9ab8d6_1137x306.png)
```
# 二维数组
b = np.array([[1,2,3,4],[5,6,7,8]])
print(b.shape)
```
![](https://img.kancloud.cn/06/6a/066a6fef016c6f2881b3566dd6dc2253_89x33.png)
![](https://img.kancloud.cn/be/a1/bea100ef384d4eba3710097fd57f6416_382x116.png)
*****
**axis = 0表示在行方向上的索引选取。axis=1表示在列方向上的进行索引选取**
*****
## 创建Array
numpy提供了内置的函数来创建一些特殊的数组,我们仅仅需要传递创建的大小即可
![](https://img.kancloud.cn/83/7a/837a98f7c67db826ece92c4df5663c8d_1253x244.png)
![](https://img.kancloud.cn/7b/98/7b98184cabac8dc1a4d71ef1a8d0f3a9_213x342.png)
*****
```
#按照b的数组结构全填0
np.zeros_like(b)
```
*****
生成如下图的数组
![](https://img.kancloud.cn/26/76/26766c05d6d17414be0f4e9dad53f717_246x138.png)
*****
## Array的常用属性和方法
* 统计计算
* 排序
* 按照大小查索引
* 条件查找
* shape
*****
生成3行4列的数组
![](https://img.kancloud.cn/58/73/587329746a9ed5ff8108926a3bc75eb4_566x265.png)
![](https://img.kancloud.cn/2c/16/2c167854a79d909b94031bbb4e5977c4_167x194.png)
![](https://img.kancloud.cn/d9/e4/d9e499f871f9f3eea11e7ee749f4d528_587x305.png)
![](https://img.kancloud.cn/74/99/7499ba41da2903c0ec4c2f0c13daab30_376x141.png)
*****
![](https://img.kancloud.cn/02/94/02946e253f2e4a64361c384c54712387_590x150.png)
*****
![](https://img.kancloud.cn/7b/be/7bbed4997b6ea7f5b70d73047f016c69_645x109.png)
*****
**聚合计算**
![](https://img.kancloud.cn/2e/79/2e79f688513e3e611beb05e4f3336656_1320x585.png)
![](https://img.kancloud.cn/6c/5a/6c5a3dbce91b7a5e6f4a550e424de079_667x344.png)
*****
![](https://img.kancloud.cn/d8/15/d815dfd180e441ddf3d013061514923c_281x92.png)
*****
![](https://img.kancloud.cn/95/94/959464927c38149bcadd3e28fd07f164_304x102.png)
*****
## Shape改变
一个数组的 shape 是由轴及其元素数量决定的,它一般由一个整型元组表示,且元组中的整数表示对应维度的元素数
我们最容易接触到的shape改变就是转置,这通常用于计算dot
![](https://img.kancloud.cn/32/9e/329e494f8a95502c911592f267a8014d_812x315.png)
还有一种常见的情形是在机器学习中应用,我们需要改变数组的形状从而适应我们的建模需要
![](https://img.kancloud.cn/70/ce/70cee7ac5192b2e794b362beaaaef57a_1309x467.png)
![](https://img.kancloud.cn/1b/4b/1b4b2a0fb5e8f1710404eafb902b0f6d_396x303.png)
*****
![](https://img.kancloud.cn/45/80/45802b79a0a80120b5491aaa67362eef_1306x491.png)
ravel()和reshape()生成新的数组,不改变原有的数组
![](https://img.kancloud.cn/d9/de/d9de5ee260262b52e5092b71ee76c35e_736x135.png)
*****
## 随机数
numpy可以根据一定的规则创建随机数,随机数的使用会在后面概率论,数据挖掘的时候经常用到。
*****
生成3*4的随机数,生成范围[0,1)
![](https://img.kancloud.cn/86/e4/86e4e0a68d53f7be63fffd42a395890f_558x113.png)
*****
```
#生成10个随机数
np.random.rand(10)
```
*****
生成一个不大于10的随机数
![](https://img.kancloud.cn/cf/b6/cfb69edfe4f2c2471c9d01dc67592c9c_290x99.png)
*****
生成两个5*2的数组。生成范围[0.0, 1.0)
![](https://img.kancloud.cn/74/b8/74b883d0cfd59f01e04a0e5997e9e10a_385x306.png)
*****
![](https://img.kancloud.cn/14/2e/142e5dc5748d99523100c20a71e17573_416x150.png)
*****
生成3*4的数组,数组中的每个元素从前面的参数列表中随机选取
![](https://img.kancloud.cn/0a/d3/0ad3cf6f9d683dbaf1a99b21fe13e5c5_373x125.png)
*****
## 数组的索引
**切片**选取类似于list,但是array可以是多维度的,因此我们需要指定每一个维度上的操作
![](https://img.kancloud.cn/f9/91/f991395f9aa3c41c2893709865e89f3c_254x349.png)
![](https://img.kancloud.cn/f8/f2/f8f2c55d24b576d2107db7c54ef264d1_237x332.png)
*****
[]里用切片进行选取,第一个切片参数是在行索引方向上进行选取。[1:3]表示选中位置下标为1的行到位置下标为3的行。
切片按位置选取时,前闭后开,会选到位置下标为2的行止
![](https://img.kancloud.cn/84/3e/843efc844412db5d8074e7fccb4c3d57_217x315.png)
*****
[0:1]选取位置从第0行到1行。逗号后0选取第一列
![](https://img.kancloud.cn/17/72/177211d54ba20878f734ffbaa623e1a5_274x349.png)
*****
![](https://img.kancloud.cn/0d/ed/0ded401ed224cd1f65c221065d3c742d_770x170.png)
*****
![](https://img.kancloud.cn/1a/bd/1abd95f2566f39567d04e99f4870cfac_314x238.png)
**整数索引**
```
#行位置索引列表1,2。列位置索引列表0,1。所以选中(1,0)和(2,1)
a[[1,2],[0,1]]
```
![](https://img.kancloud.cn/15/4d/154dba5c03419f73efc235a731cfca81_268x74.png)
![](https://img.kancloud.cn/0a/af/0aafd7432c8ff86c3e86d800815bed10_198x38.png)
*****
**布尔型索引**
```
# 选出数组中所有大于4的元素
a >4
a[a>4]
```
![](https://img.kancloud.cn/15/4d/154dba5c03419f73efc235a731cfca81_268x74.png)
![](https://img.kancloud.cn/09/b6/09b6cdf82b221c5ecd878d45bb0e6394_398x30.png)
*****
**图解索引**
mask是行索引从位置0到最后一行,每行被选中与否的布尔值列表
![](https://img.kancloud.cn/3f/d1/3fd1864e1ac44507897b76efcb9e272a_779x338.png)
*****
a[2::2,::2]。2::2表示选中位置为2的行和从2开始能不断加2得到索引行。::2表示选中位置为0的列和从0开始能不断加2得到的索引列
![](https://img.kancloud.cn/33/84/33844505d52578b367ff9028b8a77303_798x459.png)
*****
## 数学计算
需要线性代数的知识
![](https://img.kancloud.cn/05/4b/054b6af5f22a0fc0ff873f6a6fb8662f_1017x210.png)
![](https://img.kancloud.cn/bd/4c/bd4c4cc759d49ab3aa2def205adb1108_1146x263.png)
*****
![](https://img.kancloud.cn/38/da/38da10b7151f8a48d971b2271ad839cd_593x411.png)
*****
![](https://img.kancloud.cn/7e/02/7e02533dc1e17c5fc30f9173f6f05277_628x268.png)
![](https://img.kancloud.cn/cd/e1/cde12bc5940109cee51c1b7dc6402c3d_580x138.png)
*****
![](https://img.kancloud.cn/dd/dd/dddd35e525393e292bdf86c4a2b565ad_179x214.png)
*****
![](https://img.kancloud.cn/31/84/3184ce6ff6a2e687f799bfff83a99563_1329x714.png)
*****
![](https://img.kancloud.cn/fc/3f/fc3fed0e53e48b6abf3712c772d556a1_621x318.png)
*****
## 实际应用
### 机器学习
在我们学习到后面机器学习的时候,会遇到一个公式。这个公式在统计学习中叫做最小二乘法,在机器学习中的线性回归模型中叫做平方和误差
Prediction是线性回归模型预测试,求与观测值的方差,数字越大,模型预测能力越差
![](https://img.kancloud.cn/2d/e4/2de4b2510e4181862463fe5427adad4a_1330x383.png)
![](https://img.kancloud.cn/23/09/2309ed9c4ba87d3538cbd2351851650f_1299x640.png)
![](https://img.kancloud.cn/28/7b/287b442387258a537e84d7b3b912aefd_1352x760.png)
![](https://img.kancloud.cn/e9/c5/e9c592238dffdecafa36f673d2362384_1346x634.png)
### **文本**
我们可以把一句话切割成单个的字符
![](https://img.kancloud.cn/92/b8/92b8365c2f41e6d77cf78e2fdec193a5_1345x643.png)
- 第五节 Pandas数据管理
- 1.1 文件读取
- 1.2 DataFrame 与 Series
- 1.3 常用操作
- 1.4 Missing value
- 1.5 文本数据
- 1.6 分类数据
- 第六节 pandas数据分析
- 2.1 索引选取
- 2.2. 分组计算
- 2.3. 表联结
- 2.4. 数据透视与重塑(pivot table and reshape)
- 2.5 官方小结图片
- 第七节 NUMPY科学计算
- 第八节 python可视化
- 第九节 统计学
- 01 单变量
- 02 双变量
- 03 数值方法
- 第十节 概率
- 01 概率
- 02 离散概率分布
- 03 连续概率分布
- 第一节 抽样与抽样分布
- 01抽样
- 02 点估计
- 03 抽样分布
- 04 抽样分布的性质
- 第十三节 区间估计
- 01总体均值的区间估计:𝝈已知
- 02总体均值的区间估计:𝝈未知
- 03总体容量的确定
- 04 总体比率