Numpy 是一个运行速度非常快的数学库,主要用于数组计算,包含:
1.一个强大的N维数组对象 ndarray
2.广播功能函数
3.整合 C/C++/Fortran 代码的工具
4.线性代数、傅里叶变换、随机数生成等功能
Numpy的基本运算:
import numpy as np
# 将列表转换为numpy数组
array = np.array([[1, 2, 3],
[2, 3, 4]])
print(array)
# 查看数组维度
print('number of dim:', array.ndim)
# 查看数组形状(几行几列)
print('shape:', array.shape)
# 查看数组大小(总的元素个数)
print('size:', array.size)
# 定义数组的数据类型
a = np.array([1, 2, 3], dtype=int)
print(a.dtype)
# 创建矩阵
# 全零矩阵
b = np.zeros((3, 4)) # 3行4列全零矩阵
print(b)
# 全1矩阵
c = np.zeros((3, 4)) # 3行4列全1矩阵
print(c)
# 空矩阵
d = np.empty((3, 4)) # 3行4列空矩阵
print(d)
# 有序矩阵
e = np.arange(10, 20, 2) # 10-19,步长为2的矩阵
print(e)
f = np.arange(12).reshape((3, 4)) # 0-11,步长为1,reshape重新定义矩阵形状为3行4列
print(f)
g = np.linspace(1, 10, 6)# linspace线段,在1-10之间生成6段的矩阵
print(g)
h = np.linspace(1, 10, 6).reshape((2, 3))# linspace线段,在1-10之间生成6段的矩阵,重新定义为2行3列
print(h)
# 基础运算
a1 = np.array([10, 20, 30, 40])
b1 = np.arange(1, 5)
print(a1, b1)
# 矩阵的加减乘除
c1 = a1 + b1
d1 = a1 - b1
e1 = a1 * b1
f1 = a1 / b1
# 平方
g1 = a ** 2
# 三角函数运算
h1 = np.sin(a1)
a2 = np.cos(a1)
b2 = np.tan(a1)
# 判断矩阵中元素与某个数的关系,结果返回True or False
print(a1 > 18) # <, ==
# 多维矩阵运算
c2 = np.array([[1, 1],
[0, 1]])
d2 = np.arange(4).reshape((2, 2))
e2 = c2 * d2 # 位置相同元素相乘
e2_dot = np.dot(c2, d2)# 按矩阵元算法则相乘
e2_dot_2 = c2.dot(d2)# 等同于上一步
print(e2)
print(e2_dot)
print(e2_dot_2)
# 求和,最大值,最小值
f2 = np.random.random((2, 4)) #2行4列矩阵,每个元素在0-1之间随机生成
print(np.sum(f2))
print(np.max(f2))
print(np.min(f2))
# 定义在哪一个维度进行操作,0维表示行,1维度表示列
print(np.sum(f2, axis=0))
print(np.max(f2, axis=1))
print(np.min(f2, axis=1))
# 索引
g2 = np.arange(2, 14).reshape((3, 4))
print(np.argmax(g2)) # 最大值索引
print(np.argmin(g2))# 最小值索引
print(g2[2]) # 输出索引为2的行所有元素
print(g2[2][2]) # 输出位置为(2,2)的元素
print(g2[2, 2]) # 等同上一行
print(g2[2, :]) # 第2行的所有元素
print(g2[:, 1]) # 第一列的所有元素
print(g2[1, 1:3]) # 第一行从第一位到第三位的元素
# 计算矩阵平均值
print(np.mean(g2))
print(g2.mean()) # 等同上一行
# 求矩阵中位数
print(np.median(g2))
# 逐步累加, 累差
print(np.cumsum(g2))
print(np.diff(g2))
# 判断非零数
print(np.nonzero(g2))
# 排序
print(np.sort(g2)) # 逐行,从小到大排序
# 矩阵的转置
print(np.transpose(g2))
print(g2.T)
print((g2.T).dot(g2))
# 截取,np.clip(a, b, c) 在a矩阵中,所有小于b的元素都令其等于b,所有大于c的元素都令其等于c
print(np.clip(g2, 6, 9))
# 将矩阵变为0维,展开所有元素变为一行矩阵
print(g2.flatten())
print(g2.flat) # 迭代器
# 矩阵行、列和元素的遍历
# 迭代每一行,默认为对行迭代
for row in g2:
print(row)
# 迭代每一列,因为默认为对行迭代,所以要对列迭代,需要先将矩阵转置,再对转置后的矩阵进行行迭代
for col in g2.T:
print(col)
# 遍历每一个元素, 先将矩阵转变为一行的矩阵
for item in g2.flat:
print(item)
# 矩阵的合并
h2 = np.array([1, 1, 1])
a3 = np.array([2, 2, 2])
# 上下合并
print(np.vstack((h2, a3))) # vertical stack
# 左右合并
print(np.hstack((h2, a3))) # horizontal stack
# 给序列加一个维度(序列对于矩阵转置操作无效,需要先加一个维度)
print(h2[np.newaxis, :]) # 在行上面加一个维度
print(h2[:, np.newaxis]) # 在列上面加一个维度
print(np.hstack((h2[:, np.newaxis], a3[:, np.newaxis])))
# 在指定维度方向进行多个矩阵合并
b3 = np.array([[1, 1, 1],
[2, 2, 2]])
d3 = np.array([[2, 2, 2],
[3, 3, 3]])
print(np.concatenate((b3, d3, b3, d3), axis=0)) #在0维方向(列方向)合并矩阵
print(np.concatenate((b3, d3, b3, d3), axis=1)) #在0维方向(行方向)合并矩阵
# 矩阵的分割
e3 = np.arange(12).reshape((3, 4))
print(e3)
# 横向分割
print(np.split(e3, 2, axis=1)) # 横向分割成2块
print(np.hsplit(e3, 2)) # 等同上一行
# 纵向分割
print(np.split(e3, 3, axis=0)) # 纵向分割成3块
print(np.vsplit(e3, 3)) # 等同上一行
# 不等分分割
print(np.array_split(e3, 3, axis=1)) # 横向分割,4列分成3块
# 赋值
f3 = np.arange(4)
g3 = f3
h3 = g3
f3[0] = 8
print(g3, h3) # 改变矩阵f3中的元素,其赋值矩阵g3, h3也会随之改变
h3[1 : 3] = [22, 33]
print(h3, f3) # 改变h3中元素,f3也会随之改变
# copy(断开关联,赋值)
a4 = f3.copy() # deep copy