Numpy
# numpy基础知识
import numpy as np
# python使用numpy创建数组并指定数据类型
array1 = np.array([1, 2, 3, 4], dtype="float32")
print(array1)
print(type(array1[0]))
print(array1.shape)
# numpy创建二维数组
array2 = np.array([[1, 2, 3],
[4, 5, 6],
[7, 8, 9]])
print(array2)
print(array2.shape)
# 从头创建数组
# 创建值都为0的数组 numpy.zeros(n, dtype = type)
array3 = np.zeros(5, dtype=int)
print(array3)
# 创建n*m的数组,值都为k numpy.full((n, m), k)
array10 = np.full((3, 5), 9)
print(array10)
# 创建多维数组 numpy.ones((n*m), dtype = type) 值都为1
array4 = np.ones((2, 4), dtype=int)
print(array4)
# 创建单位n阶矩阵 numpy.eye(n)
array5 = np.eye(3)
print(array5)
# 创建线性序列数组, 从n开始到m结束,步长为k numpy.array(n, m, k)
array6 = np.arange(1, 15, 2)
print(array6)
# 创建一个n元素的数组,将k个数均匀分配到n-m numpy.linspace(n, m, k)
array7 = np.linspace(0, 1, 4)
print(array7)
# 创建一个n个元素的数组,组成1-n^9的等比数列
array8 = np.logspace(0, 9, 10)
print(array8)
# 创建一个n*m的,在0~1之间均匀分布的随机数构成的矩阵
array9 = np.random.random((3, 3))
print(array9)
# 创建一个n*m的,均值为k,标准差为l的正态分布随机数构成的数组
array11 = np.random.normal(0, 1, (3, 3)) # 均值为0,标准差为1
print(array11)
# 创建一个n*m的,在[k, l)之间随机整数构成的数组 numpy.random.randint(k, l, (n, m))
array12 = np.random.randint(0, 10, (3, 3))
print(array12)
# 随机重排列 不会改变原有的x 但是shuffle会
x = np.array([1, 2, 3, 4])
print(np.random.permutation(x))
np.random.shuffle(x)
print(x)
# 随机采样
y = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
# 1.按指定形状采样 size = (n, m) n行m列
y1 = np.random.choice(y, size=(4, 3))
print(y1)
# 2.按概率采样
y2 = np.random.choice(y, size=(4, 3), p=y / np.sum(y))
print(y2)
# 数组的属性
# 1.数组的形状 x.shape
# 2.数组的维度 x.ndim
# 3.数组的大小 x.size
# 4.数组的数据类型 x.dtype
# 获取副本 x.copy()
# 数组的变形 x.reshape(n, m) n*m == 原来数组中元素的个数
# 一维向量转行向量
x1 = np.arange(12)
print(x1)
x2 = x1.reshape(1, x1.shape[0]) # 转行
x3 = x1[np.newaxis, :] # 转行
print(x2)
print(x3)
x4 = x1.reshape(x1.shape[0], 1) # 转列
x5 = x1[:, np.newaxis] # 转列
print(x4, x5)
# 多维向量转一维向量
x6 = np.random.randint(0, 10, (3, 4))
x7 = x6.flatten() # 返回的是副本
x8 = x6.ravel() # 返回的是视图
x9 = x6.reshape(-1) # 返回的是视图
print(x6)
print(x7)
print(x8)
print(x9)
# 数组的拼接
# 1.水平拼接 要求行数相同
z1 = np.array([[1, 2, 3],
[4, 5, 6]])
z2 = np.array([[7, 8, 9],
[0, 1, 2]])
z3 = np.hstack([z1, z2]) # 水平拼接 副本 要求行相等
print(z3)
# 2.垂直拼接 要求列数相同
z4 = np.vstack([z1, z2]) # 非视图
z5 = np.r_[z1, z2]
print(z4)
print(z5)
# 数组的分裂
# 1.split
z6 = np.arange(10)
z7, z8, z