目录
[二.工具准备Jupyter Notebook](#二.工具准备Jupyter Notebook)
[编辑模式(按 Enter 进入)](#编辑模式(按 Enter 进入))
[命令模式(按 Esc 进入)](#命令模式(按 Esc 进入))
[三. 创建ndarray数组](#三. 创建ndarray数组)
[1. array()](#1. array())
[2. ones()](#2. ones())
[7. arange()](#7. arange())
[10. random.normal()](#10. random.normal())
[11. random.random()](#11. random.random())
[四. ndarray属性](#四. ndarray属性)
[五. ndarray基本操作](#五. ndarray基本操作)
[1. 索引操作](#1. 索引操作)
[5.1.1 一维数组索引演示](#5.1.1 一维数组索引演示)
[5.1.2 多维数组索引基本操作演示](#5.1.2 多维数组索引基本操作演示)
[5.1.2 根据索引修改数据](#5.1.2 根据索引修改数据)
[2. 切片操作](#2. 切片操作)
[5.2.1. 一维切片操作](#5.2.1. 一维切片操作)
[5.2.2 二维切片操作(行)](#5.2.2 二维切片操作(行))
[5.2.3 二维切片操作(列)](#5.2.3 二维切片操作(列))
[六. NumPy中常用的其他函数](#六. NumPy中常用的其他函数)
[1. reshape()](#1. reshape())
[2. 级联](#2. 级联)
[6.2.1 np.concatenate()](#6.2.1 np.concatenate())
[6.2.2 hstack()](#6.2.2 hstack())
[6.2.3 vstack()](#6.2.3 vstack())
[3. 切分/ 拆分/ 分割](#3. 切分/ 拆分/ 分割)
[七. 数组的赋值和深拷贝](#七. 数组的赋值和深拷贝)
[1. 数组的赋值](#1. 数组的赋值)
[2. 数组的深拷贝(copy)](#2. 数组的深拷贝(copy))
[八. 常见的聚合函数](#八. 常见的聚合函数)
[1. np.sum()](#1. np.sum())
[2. min / max](#2. min / max)
[3. mean / average](#3. mean / average)
[4 . np.madian()](#4 . np.madian())
[5. np.percentile()](#5. np.percentile())
[6. np.argmin() / np.argmax()](#6. np.argmin() / np.argmax())
[7. np.std()](#7. np.std())
[8. var()](#8. var())
[9. power()](#9. power())
[10. argwhere()](#10. argwhere())
[11. np.sum() / np.nansum()](#11. np.sum() / np.nansum())
[九. 矩阵操作](#九. 矩阵操作)
[1. 基本的矩阵操作](#1. 基本的矩阵操作)
[9.1.1 数和矩阵的运算](#9.1.1 数和矩阵的运算)
[9.1.2 矩阵和矩阵运算(相同维度)](#9.1.2 矩阵和矩阵运算(相同维度))
[编辑2. 矩乘积(线性代数)](#编辑2. 矩乘积(线性代数))
[9.2.1 np.dot()](#9.2.1 np.dot())
[十. NumPy的广播机制](#十. NumPy的广播机制)
[十一. NumPy其他常用的数学操作](#十一. NumPy其他常用的数学操作)
[十三. NumPy数组的二快速排序](#十三. NumPy数组的二快速排序)
[十四. NumPy文件IO操作](#十四. NumPy文件IO操作)
一.Numpy介绍
Numpy(Numerical Python)是Python的一个开源的数值计算库 。可用来存储和处理大型矩阵,比Python自身的嵌套列表结构要高效的多,支持大量的维度数组与矩阵运算,此外也针对数组运算提供大量的数学函数库,包括数学、逻辑、形状操作、排序、选择、输入输出、高散博立叶变换、基本线性代数、基本统计运算和随机模拟等等。
几乎所有从事Python工作的数据分析师都利用NumPy的强大功能。
二.工具准备Jupyter Notebook
Jupyter Notebook(此前被称为Ipython Notebook)是一个交互式笔记本,支持运行40多种编程语言。
Juppyter Notebook 的本质是一个Web应用程序,便于创建和共享文学化程序文档,支持实时代码,教学方程、可视化和markdown。用途包括,数据清洗模拟,统计建模,机器学习等等。
Jupyter notebook: 集文本、代码、图像、公式的展示于一体的超级Python web界面。
下载anaconda运行jupyter notebook 命令就可以启动Jupyter notebook
1.Jupyter Notebook 有两种键盘输入模式
- 命令模式:键盘输入运行程序命令;这种的单元框线为蓝色
- 编辑模式:允许你往单元格中键入代码或文本;这时的单元框线是绿色的
2.jupyter Notebook的快捷键
编辑模式 (按 Enter 进入)
| 快捷键 | 功能 |
|---|---|
| Tab | 代码补全或缩进 |
| Shift + Tab | 显示帮助/提示 |
| Shift + Enter | 运行本单元,并选中下一个单元 |
| Ctrl + Enter | 运行本单元 |
| Alt + Enter | 运行本单元,并在下方插入一个新单元 |
命令模式 (按 Esc 进入)
| 快捷键 | 功能 |
|---|---|
| Shift + Enter | 运行本单元,并选中下一个单元 |
| Ctrl + Enter | 运行本单元 |
| Alt + Enter | 运行本单元,并在下方插入一个新单元 |
| Y | 把当前单元变成代码单元 |
| M | 把当前单元变成Markdown单元(写笔记用) |
| A | 在当前单元上方插入一个新单元 |
| B | 在当前单元下方插入一个新单元 |
| DD(按两次 D) | 删除当前选中的单元 |
通用编辑快捷键(和普通编辑器一样)
| 快捷键 | 功能 |
|---|---|
| Ctrl + A | 全选 |
| Ctrl + Z | 撤销 |
| Ctrl + C | 复制 |
| Ctrl + V | 粘贴 |
| Ctrl + / | 注释或取消注释(超级实用!) |
三. 创建ndarray数组
ndarray的元素类型规则
-
默认所有元素类型相同
-
如果传入列表包含不同类型 ,会自动统一为同一类型
-
类型转换优先级 :str > float > int
np.array():创建数组(从列表或元组)
np.ones():创建全1数组
np.zeros():创建全0数组
np.full():创建指定值的填充数组
np.eye():创建单位矩阵
np.linspace():创建等差数列
np.arange():创建范围数组(类似range)
np.random.randint():生成随机整数
np.random.randn():生成标准正态分布随机数
np.random.normal():生成正态分布随机数
np.random.random():生成[0,1)区间随机数
np.random.rand():生成[0,1)区间随机数(可指定形状)
np.random.uniform():生成均匀分布随机数
1. array()
使用np.array() 创建拿到ndarray数组,只需要传入参数一个列表或者是元组即可。也可以指定创建元素的类型.
python
import numpy as np
a = np.array([1, 2, 3], dtype=np.int64)
print(a, type(a), a.dtype)
2. ones()
np.ones(shape, dtype=None, order='C')
- 创建一个所有元素都为1的多维数组
参数说明:
shape:形状
dtype=None:元素类型
order:
{'C', 'F'},可选,默认值:'C'
- 是否在内存中以行主(C-风格)或列主(Fortran-风格)顺序存储多维数据,一般默认即可
python
# ones()
import numpy as np
a = np.ones((3,3), dtype=np.int64)
print(a)
3.zeros()
np.zeros(shape, dtype=float, order='C')
- 创建一个所有元素都为0的多维数组
参数说明:
shape:形状
dtype=None:元素类型
order:
{'C', 'F'},可选,默认值:'C'
- 是否在内存中以行主(C-风格)或列主(Fortran-风格)顺序存储多维数据
4.full()
np.full(shape, fill_value, dtype=None, order='C')
- 创建一个所有元素都为指定元素的多维数组
参数说明:
shape:形状
fill_value:填充值
dtype=None:元素类型
order:
{'C', 'F'},可选,默认值:'C'
- 是否在内存中以行主(C-风格)或列主(Fortran-风格)顺序存储多维数据
python
import numpy as np
a = np.full((3,3), fill_value=2, dtype=np.int64)
a
5.eye()
np.eye(N, M=None, k=0, dtype=float)
- 对角线为1,其他位置为0的二维数组,(单位矩阵)
参数说明:
N:行数
M:列数,默认为None,表示和行数一样
k=0:向右偏移0个位置
dtype=None:元素类型
k值 效果 示例 k=0 主对角线为1 标准的单位矩阵 k=1 主对角线向右上偏移1 1在右上一条线 k=-1 主对角线向左下偏移1 1在左下一条线
python
# esy() 单位矩阵
a = np.eye(5, 6, k = 2)
print(a)
6.linspace()
np.linspace(start, stop, num=50, endpoint=True, retstep=False, dtype=None)
- 创建一个等差数列
参数说明:
start:开始值
stop:结束值
num=50:等差数列中默认有50个数
endpoint=True:是否包含结束值
retstep=False:是否返回等差值(步长)
dtype=None:元素类型
python
import numpy as np
a, diff = np.linspace(0, 10, 6, True, True)
print(a)
print(diff)
7. arange()
np.arange([start, ]stop, [step, ]dtype=None)
创建一个数值范围的数组
和Python中
range功能类似参数说明:
start:开始值(可选)
stop:结束值(不包含)
step:步长(可选)
dtype=None:元素类型
python
import numpy as np
a = np.arange(0, 10, 2)
print(a)

8.random.randint()
np.random.randint(low, high=None, size=None, dtype='l')
- 创建一个随机整数的多维数组
参数说明:
low:最小值
high=None:最大值
当
high=None时,生成的数值在 [0, low) 区间内如果使用
high参数,则生成的数值在 [low, high) 区间size=None:数组形状,默认只输出一个随机值
dtype=None:元素类型
python
import numpy as np
a = np.random.randint(1, 10, size=(10, 10)) # 左闭右开
print(a)
9.random.randn()
np.random.randn(d0, d1, ..., dn)
- 创建一个服从标准正态分布的多维数组
标准正态分布(u分布)以 0为均值、1为标准差 的正态分布,记为 N(0, 1)在 0 左右出现的概率最大,越远离 0 出现的概率越低
参数说明:
- d0, d1, ..., dn:各个维度的数值(即形状参数)
python
import numpy as np
a = np.random.randn(10, 10)
a
10. random.normal()
np.random.normal(loc=0.0, scale=1.0, size=None)
- 创建一个服从正态分布的多维数组
参数说明:
loc=0.0:均值,对应着正态分布的中心
scale:标准差,对应分布的宽度
scale越大,正态分布的曲线越矮胖
scale越小,曲线越高瘦
size=None:数组形状
python
import numpy as np
a = np.random.normal(5, 1, (10, 10))
a
11. random.random()
np.random.random(size=None)
- 创建一个元素为 0~1(左闭右开) 的随机数的多维数组
参数说明:
size=None:数组形状
python
import numpy as np
a = np.random.random(size = (10, 10))
a
12.random.rand()
np.random.rand(d0, d1, ..., dn)
创建一个元素为 0~1(左闭右开) 的随机数的多维数组
和
np.random.random功能类似,掌握其中一个即可参数说明:
- dn:第 n 个维度的数值
python
import numpy as np
a = np.random.rand(5, 5)
a
13.random.uniform()
np.random.uniform(low=0.0, high=1.0, size=None)它的参数非常直观:
low: 随机数取值范围的下限,包含该值。默认为0。
high: 随机数取值范围的上限,不包含该值。默认为1。
size: 输出数组的形状。例如size=5会生成5个随机数的一维数组;size=(2, 3)会生成一个2行3列的二维数组。如果为None(默认),则只返回一个随机数
python
import numpy as np
a = np.random.uniform(1, 10, (5, 5))
a
四. ndarray属性
- ndim: 维度
- shape: 形状 (各维度的长度)
- size: 总长度
- dtype: 元素类型
- T: 转置
- itemsize: 单个元素的字节大小
- nbytes: 总字节大小
代码演示:
python
# 数据构造
import numpy as np
a = np.random.randint(0, 100, (4,5))
print(a)
# [[89 31 86 66 31]
# [15 38 31 52 85]
# [43 95 40 67 94]
# [29 7 27 57 63]]
python
print(f"数组的维度: {a.ndim}")
print(f"数组的形状: {a.shape}")
print(f"数组的总长度: {a.size}")
print(f"数组中元素的类型: {a.dtype}")
print(f"数组转置: {a.T}")
print(f"数组中单个元素的字节大小: {a.itemsize}")
print(f"数组中所有元素总大小: {a.nbytes}")


五. ndarray基本操作
1. 索引操作
一维与列表完全一致,多维的时候同理
格式: 数组名[][]...
简化:数组名[, , ...]
5.1.1 一维数组索引演示
python
import numpy as np
a = np.arange(2, 10)
print(a)
# 利用索引取出数字5
print(a[3])
print(a[-5])

5.1.2 多维数组索引基本操作演示
二维:

三维...N维与二维类似
5.1.2 根据索引修改数据
格式: 数组名[行,列] = [, , , ] / n


2. 切片操作
一维与列表完全一致,多维的时候同理
5.2.1. 一维切片操作

5.2.2 二维切片操作(行)


5.2.3 二维切片操作(列)


六. NumPy中常用的其他函数
1. reshape()
作用 :改变数组的形状(维度),不改变数据本身
代码演示1: 把一维数组变为二维数组

代码演示2:使用-1。注意:只能有一个-1的存在。会自动计算

2. 级联
6.2.1 np.concatenate()
是 NumPy 中用于沿现有轴连接数组序列的函数。它可以将多个数组合并成一个更大的数组。
参数是列表或元组
级联的数组维度必须相同
可通过
axis参数改变级联的方向
axis=0:沿第0轴(行方向/垂直)连接
axis=1:沿第1轴(列方向/水平)连接

6.2.2 hstack()
作用 :将多个数组水平方向 (沿第1轴)拼接在一起,即增加列数

6.2.3 vstack()
作用 :将多个数组垂直方向 (沿第0轴)拼接在一起,即增加行数。

3. 切分/ 拆分/ 分割
np.split(ary, indices_or_sections, axis=0)
ary:要分割的数组
indices_or_sections:分割位置或份数
如果是整数,表示均分成几份
如果是列表,表示分割点的位置
axis:沿着哪个轴分割,默认0(第1轴)
split就像切蛋糕:
可以均分(比如把10个元素切成5份,每份2个)
也可以按指定位置切(比如在第2个、第5个后面切一刀)

hsplit() / 与hspilt() 与split() 几乎一样就不演示了。 可以类比这级联来学习。
七. 数组的赋值和深拷贝
1. 数组的赋值
两个数组用的是同一块地址,到修改其中一个数组中元素的时候,另一个也会改变。

2. 数组的深拷贝(copy)
两个数组的地址完全不同修改其他一个数组中的元素,另一个数组不会发生改变。

八. 常见的聚合函数
np.sum():计算数组元素之和
np.min() / np.max():计算最小值 / 最大值
np.mean() / np.average():计算算术平均数 / 加权平均数
np.median():计算中位数
np.percentile():计算百分位数
np.argmin() / np.argmax():返回最小值 / 最大值的索引
np.std():计算标准差
np.var():计算方差
np.power():计算幂次方(逐元素)
np.argwhere():返回满足条件的元素的索引
np.sum() / np.nansum():计算和 / 忽略NaN值计算和
1. np.sum()
作用:计算数组中元素的和。
np.sum(a, axis=None, dtype=None, keepdims=False, initial=0)参数说明:
a:输入数组
axis=None:沿着哪个轴求和
None:所有元素求和(返回一个数)
0:沿着行方向求和(压缩行)→ 结果长度 = 列数
1:沿着列方向求和(压缩列)→ 结果长度 = 行数

2. min / max
作用:返回数组的最小值(min)、最大值(mxa)
np.min(a, axis=None, out=None)参数说明:
a:输入数组
axis=None:沿着哪个轴找最小值
None:全局最小值(返回一个数)
0:沿着行方向找最小值(每列的最小值)
1:沿着列方向找最小值(每行的最小值)

3. mean / average
mean():普通平均(总和 ÷ 个数)
average():加权平均(每个数乘以权重后求和 ÷ 权重和)(如果不指定权重,就和 mean 一样)
np.mean(a, axis=None, dtype=None, out=None, keepdims=False)
作用:计算数组元素的算术平均数
参数说明:
a:输入数组
axis=None:沿着哪个轴计算平均值
dtype:返回结果的数据类型
keepdims=False:是否保持原数组的维度
np.average(a, axis=None, weights=None, returned=False, keepdims=False)作用:计算加权平均值(如果不指定权重,就和 mean 一样)
参数说明:
a:输入数组
axis=None:沿着哪个轴计算
weights:权重数组(必须和 a 形状兼容)
returned=False:是否同时返回权重和
这里不做区分,只学习求普通平均值

4 . np.madian()
作用 :计算数组元素的中位数


5. np.percentile()
作用 :计算数组元素的百分位数
参数说明:
a:输入数组
q:要计算的百分位数,可以是单个值或列表(0-100之间)
axis=None:沿着哪个轴计算

6. np.argmin() / np.argmax()
作用 :返回数组最小值/最大值的索引
参数说明:
a:输入数组
axis=None:沿着哪个轴找
None:全局最值索引(数组展平后的位置)
0:每列最值的行索引
1:每行最值的列索引
代码演示:只演示argmin()

7. np.std()
作用 :计算数组元素的标准差
参数说明:
a:输入数组
axis=None:沿着哪个轴计算还有其他参数先掌握这些即可。

8. var()
作用 :计算数组元素的方差
参数说明:
a:输入数组
axis=None:沿着哪个轴计算

9. power()
作用 :计算
x1的x2次幂(逐元素)参数说明:
x1:底数(数组或标量)
x2:指数(数组或标量)

10. argwhere()
作用 :返回数组中非零元素的索引(或满足条件的元素位置)
参数说明:
a:输入数组(可以是布尔数组或条件表达式)返回值 :形状为
(N, ndim)的数组,每行是一个索引
代码演示1:返回非零位置的索引

代码演示2:返回符合条件的数据下标

11. np.sum() / np.nansum()
说明: 当数组中存在np.nan 类型的数值的时候可以使用np.nansum() 函数计算和。会自动忽略np.nan类型。

九. 矩阵操作

1. 基本的矩阵操作
加、减、乘、除、整除、取余、平方...
9.1.1 数和矩阵的运算
代码演示:

9.1.2 矩阵和矩阵运算(相同维度)
维度相同的矩阵进行运算:则对应位置的元素进行运算
代码演示:
2. 矩乘积(线性代数)
9.2.1 np.dot()
这个是线性代数中的知识:大家可以去学习一下。上面的图片中也给出了运算方法。
运算的前提: 第一个矩阵的行等于第二个矩阵的列。

注意:线性代数中有很多方法 np.linalg.xxx() , 比如矩阵的秩、逆矩阵、矩阵的行列式等...后面遇到在学习就好了。
十. NumPy的广播机制
广播机制的规则:
- 规则一:为缺失的维度补维度
- 规则二:缺失的元素用已有的值补充
如果两数组其中一个数组的维度为(1...) 另外的维度相等则符合广播机制
如果两个数组维度不同,(维度从右对齐,逐一比对)比如: (5, 3, 4)和(3, 4)就符合广播机制。

十一. NumPy其他常用的数学操作
np.abs:计算绝对值
np.sqrt:计算平方根
np.square:计算平方
np.exp:计算指数(e的x次方)
np.log:计算自然对数
np.sin:计算正弦值
np.cos:计算余弦值
np.tan:计算正切值
np.round:四舍五入取整
np.ceil:向上取整
np.floor:向下取整
np.cumsum:计算累积和

十三. NumPy数组的快速排序
np.sort() : 不改变原数组
ndarray.sort() : 改变原数组,不额外占用其他空间在原来数组上进行排序

十四. NumPy文件IO操作
14.1 保存数组
- save:保存ndarray到一个npy文件
- savez:将多个array保存到一个npz文件中
代码演示1:save

代码演示2:savez

14.2 读取数据
将上面保存的数组读取出来

14.3 csv, txt 文件的读写操作
还可以读取csv txt文件
代码演示:以读写csv为例。

读取:上面写入文件中的数据

十五. 两个练习题
后面会持续更新.....