1. 概述
本篇博文主要是 Python3 Numpy 的一些基础操作。
2. 具体实现
2.1 基本概念
## 数组--->矩阵
array = np.array([ # List to array
[1, 2, 3],
[2, 3, 4]
]
)
print(array)
print('number of dim:', array.ndim) # 维度
print('shape:', array.shape) # 形状
print('size:', array.size) # 元素数目
2.2 数据类型
"""
# 数据类型指定
"""
a0 = np.array([1, 2, 3]) # 一维数组
print(a0)
aa = np.zeros((3, 4), dtype=np.int32) # 生成全 0 矩阵
print(aa)
bb = np.ones((3,4), dtype=np.float32) # 生成全 1 矩阵
print(bb)
cc = 3 * np.ones((3,4)) # 生成全 3 的矩阵
print(cc)
dd = np.empty((3, 4), dtype=np.float64) # 生成 空 矩阵
dd.fill(9) # 空矩阵里面填充 9
print(dd)
2.3 数据生成, 转换
a0 = np.arange(10) #数组, 0~9
print(a0)
a1 = np .arange(0, 12, 2) # 按一定间隔生成数据
print(a1)
a2 = a1.reshape((2, 3)) # 数组转为矩阵
print(a2)
a3 = np.linspace(1, 10, 5) # 指定区间生成对应的数据个数
print(a3)
2.4 基本运算
"""
# 基本运算
"""
a0 = np.array([1, 2, 3, 4]) # 数组1
print(a0)
a1 = np.arange(4) # 数组2
print(a1)
print(a0 + a1) # 数组求和
print(a0 < 3) # 返回的是 Bool 值
a2 = np.sin(a0) # 三角函数求值
print(a2)
b0 = np.array([[1, 0],
[0, 1]
])
print(b0)
b1 = np.arange(4).reshape((2, 2))
print(b1)
b2 = b0 + b1
print(b2)
b3 = np.dot(b0, b1) # 矩阵乘法1
b4 = b0.dot(b1) # 矩阵乘法2
b5 = b0 * b1 # 逐个数相乘, 不是矩阵乘法
print(b3)
print(b4)
print(b5)
b6 = np.random.random((2, 4)) # 参数为 shape, 范围0~1
print(b6)
print(np.sum(b6))
print(np.max(b6))
print(np.min(b6))
print(np.max(b6, axis=0)) # axis=0 列
print(np.max(b6, axis=1)) # axis=1 行
2.5 求值
"""
# 求值 = 最大/最小/平均/索引值/中位数/累加/累差/转置/替换
"""
A = np.arange(14, 2, -1).reshape(3, 4)
print(A)
arg_min = np.argmin(A) # 最小值索引
print(arg_min)
arg_max = np.argmax(A) # 最大值索引
print(arg_max)
arg_mean = np.mean(A) # 平均值 A.mean()
print(arg_mean)
arg_mean0 = np.mean(A, axis=0) # axis=0 列
print(arg_mean0)
arg_mean1 = np.mean(A, axis=1) # axis=1 行
print(arg_mean1)
arg_median = np.median(A) # 中位数
print(arg_median)
arg_cum = np.cumsum(A) # 累加
print(arg_cum)
arg_diff = np.diff(A) # 累差
print(arg_diff)
arg_nonzero = np.nonzero(A) # 非零, 返回的是行号, 列号
print(arg_nonzero)
arg_sort = np.sort(A) # 按照行排序元素
print(arg_sort)
arg_trans = np.transpose(A) # 转置 A.T
print(arg_trans)
print(arg_trans.shape)
arg_clip = np.clip(A, 3, 9) # 修改头尾数字, 3~9中间数字不变
print(arg_clip)
2.6 索引, 展平
"""
# 索引, 展平
"""
A = np.arange(3, 15) # 数组
print(A)
print(A[2]) # 数组, 序号索引
A = A.reshape((3, 4)) # 矩阵
print(A)
print(A[2]) #第二行, 不再是元素
print(A[1][1], A[1, 1]) #矩阵中索引单独元素
print(A[1, :]) # 第一行的所有元素
print(A[:, 1]) # 第一列的所有元素
for row in A: # 迭代出行
print(row)
for column in A.T: # 迭代出列
print(column)
for item in A.flat: # 迭代出矩阵中的每一个元素
print(item)
print(A.flatten()) # 矩阵展平
2.7 合并
"""
# 合并
"""
A = np.array([1, 1, 1])
B = np.array([2, 2, 2])
C = np.vstack((A, B)) # 上下合并
print(A.shape, C.shape)
print(C)
D = np.hstack((A, B)) #左右合并
print(A.shape, D.shape)
print(D)
A1 = A[:, np.newaxis] # 维度变换
B1 = B[:, np.newaxis]
E = np.concatenate((A1, B1), axis=1) # 按行列拼接数据
print(E)
print(A.shape, B.shape)
print(A1.shape, B1.shape)
print(E.shape)
2.8 分割
"""
# 分割
"""
A = np.arange(12).reshape((3, 4))
print(A)
# split 只能等分!!!
A1 = np.split(A, 2, axis=1) # 竖向分割
print(A1)
A2 = np.split(A, 3, axis=0) # 横向分割, 即按照行
print(A2)
A3 = np.array_split(A, 3, axis=1) # 不等分割
print(A3)
A4 = np.vsplit(A, 3) # 纵向分割, 等分, 行方向, 分3行
print(A4)
A5 = np.hsplit(A, 2) # 横向分割, 等分, 列方向, 4列分 2 2
print(A5)
2.9 拷贝, 赋值
"""
# 拷贝, 赋值
"""
A = np.arange(4)
print(A)
B = A # 直接赋值, 各个变量的值关联(同一片内存)
C = B
print(B)
print(C)
A[0] = 11
print(A)
print(B)
print(C)
B[1] = 22
print(A)
print(B)
print(C)
D = A.copy() # deep copy, 只简单复制值
print(D)
A[2:] = 33
print(A)
print(D)