# 4. Numpy 矩阵运算
# 1. 数据类型
# 1.1. 数组
引用
import numpy as np
1array & list
# 创建一维 ndarray,默认 int 格式 x = np.array([1, 2, 3, 4, 5]) # ndarray [1 2 3 4 5] # 用 list 的写法 x = [t for t in range(5)] # [0 1 2 3 4] # 从数值范围创建数组:起始值,截止值,值的个数 x = np.linspace(0, 1, 3) # ndarray [0, 0.5, 1] # 创建全 0/1 数组 x = np.zeros(3) # ndarray [0, 0, 0] x = np.ones(3) # ndarray [1.000, 1.000, 1.000] # 用 list 的写法 x = [0] * 3 # [0, 0, 0] x = [1] * 3 # [1, 1, 1]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15# 创建多维 ndarray, 注意是两层括号 x = np.zeros((3, 3)) # [[0. 0. 0.] [0. 0. 0.] [0. 0. 0.]]
1
2
3arange
# 起始值(默认 0, 包含,间隔为 1 时可以省略) # 截止值(不包含) # 间隔(默认 1, 可以省略) x = np.arange(0, 5, 1) # ndarray [0 1 2 3 4] # 也可以简写为 x = np.arange(5) # 间隔可以为负数 x = np.arange(5, 2, -1) # ndarray [5 4 3]
1
2
3
4
5
6
7
8
9随机数
from numpy import random # 生成 10 个 0-1 的随机数 x = random.random(10) # 生成 0-100 以内的 5 个随机整数 x = random.randint(100, size=(5)) # 生成 10 个服从正态分布的随机数 x = random.randn(10)
1
2
3
4
5
6
7
8
9
10
# 1.2. 读取数组
读取文件
file = open("filename.csv", "rb") # 读取 csv 文件,以逗号为间隔,跳过第一行 data = np.loadtxt(file, delimiter=",", skiprows=1) a = data[行起始:终止,列起始:终止]
1
2
3
4
# 1.3. 增删改查
定义数据
import numpy as np x = np.array([1, 2, 3, 4, 5]) # 以下操作均在此 x 上操作
1
2
3增
# 在尾部增加元素 6 x = np.append(x, 6) # [1 2 3 4 5 6] # 在位置 idx=1 处增加元素 2 x = np.insert(x, 1, [2]) # [1 2 2 3 4 5]
1
2
3
4删
# 删掉 idx=2 的元素 x = np.delete(x, 2) # [1 2 4 5] # 删除 idx=2 和 4 的元素 x = np.delete(x, [1, 3]) # [1 3 5] # 删除一列 x = np.delete(x, 1, axis=1) # 删除第 2 列 # 删除多列 x = np.delete(x, [0,-1], axis=1) # 删除第一列和最后一列 # 删除一行 x = np.delete(x, 1, axis=0) # 删除第二行,axis 不能省略
1
2
3
4
5
6
7
8
9
10
11
12改
# 转换 ndarray 转 list x = x.tolist() # [1, 2, 3, 4, 5] # 转换 list 转 ndarray x = np.array(list1) # 修改值 x[2] = 20 # [ 1 2 20 4 5]
1
2
3
4
5
6
7查
# 访问 print(x[1], x[-1]) # 2 5 print(x[:3], x[3:]) # [1 2 3] [4 5] # 查 x = np.array([1, 2, 3, 4, 4, 5]) # 统计元素个数 c = np.sum(x == 4) # 2 # 定位元素 c = np.where(x == 4) # (array([3, 4], dtype=int64),)
1
2
3
4
5
6
7
8
9
10Clip
# 限制数据的最大最小值
1Numpy math
import numpy as np np.pi # pi np.sin() # sin
1
2
3
4
# 1.4. 拼接
水平拼接:行不变,列增加
np.hstack((a, b)) # 水平拼接 a,b np.concatenate((a, b), axis=1) # 同上
1
2垂直拼接:行增加,列不变
np.vstack((a, b)) # 垂直拼接 a,b np.concatenate((a, b), axis=0) # 同上
1
2
# 1.5. 行列变换
行列变换
import numpy as np z = np.array([[1, 2, 3, 4], [5, 6, 7, 8]]) # [[1 2 3 4], [5 6 7 8]] # 变成一行 z = np.reshape(z, (-1)) # [1 2 3 4 5 6 7 8] # 变成 n*1, -1 表示任意值 z = np.reshape(z, (-1, 1)) # [[1], [2], [3], [4], [5], [6], [7], [8]] # 变成 4*n z = np.reshape(z, (4, -1)) # [[1 2], [3 4], [5 6], [7 8]] # 转置 z = z.T
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 2. 函数
# 2.1. 算数函数
加 add
a = np.array([1, 2, 3]) b = np.array(4) print(np.add(a, b)) # [5 6 7] b = np.array([4, 2, 3]) print(np.add(a, b)) # [5 4 6]
1
2
3
4
5
6
# 2.2. 统计函数
# 2.3. 逻辑函数
where
# 条件,满足条件输出 x, 不满足输出 y y = np.where(condition, x, y)
1
2x = np.arange(-2, 2) # [-2 -1 0 1] y = np.where(x < 0, -x, x) # [2 1 0 1]
1
2
# 2.4. 排序
根据某一列排序
# 根据第 0 列排序,升序 data = numpy.sort(data, axis=0)
1
2
# 3. 拟合
多项式拟合
# 对数据 x, y 进行拟合,最高次为 3 z = np.polyfit(x, y, 3) # 多项式 p = np.poly1d(z) # 利用拟合的多项式进行计算 y1 = p(x1)
1
2
3
4
5
6
← 3. 文件 5. Pandas 数据处理 →