import numpy as np
# 查看numpy版本
np.__version__
# 创建全0矩阵 3行5列 类型int
zeros = np.zeros(shape=(3, 5), dtype=int)
# 创建全1矩阵 3行5列 类型int
ones = np.ones((3, 5), dtype=int)
# 创建自定义矩阵 3行5列 每个值为666
full = np.full((3, 5), 666)
# 自带range函数和numpy的arange的区别
# 自带的range中步长不能传入浮点数
list_ok = [i for i in range(0, 10, 2)] #正常
list_er = [i for i in range(0, 10, 0.2)] #错误
# numpy的arange中步长可以传入浮点数
list_ok = [i for i in np.arange(0, 10, 2)] #正常
list_ok = [i for i in np.arange(0, 10, 2.5)] #正常
# numpy的linspace是使用
# arg1:起始点 arg2:终止点 arg3:等长截取个数 注:终止点是闭区间
linspace = np.linspace(0, 20, 10)
# random.randint
# arg1:起始点 arg2:终止点 arg3:个数 注:终止点是开区间
randint = np.random.randint(0, 10, 10)
# random.randint
# arg1:起始点 arg2:终止点 arg3:矩阵 注:终止点是开区间
randint = np.random.randint(0, 10, size=(3, 5))
# 随机种子seed,可以使生成的随机数相同
# 设置随机种子
np.random.seed(666)
# 第一次生成随机数
randint1 = np.random.randint(4, 8, size=(3, 5))
# 设置随机种子
np.random.seed(666)
# 第二次生成随机数
randint2 = np.random.randint(4, 8, size=(3, 5))
# 结果:randint1 = randint2 可以看出设置相同随机种子的时候,可以使两次生成随机数的值相同
# 生成符合正态分布的随机数
# arg1:均值 arg2:方差 arg3:显示情况
normal = np.random.normal(0, 1, size=(3, 5))
# 查看数组的维度ndim函数
x = np.arange(10)
y = np.arange(15).reshape(3, 5)
print(x.ndim) #结果:1
print(y.ndim) #结果:2
# 查看维度
x = np.arange(10)
y = np.arange(15).reshape(3, 5)
x.shape
# 结果:(10, )第一个维度有10个数
y.shape
# 结果:(3, 5)第一个维度有3行 第二个维度有5列
# 查看个数
x = np.arange(10)
y = np.arange(15).reshape(3, 5)
x.size
# 结果:10 表示有10个数
y.size
# 结果:15 表示有3×5=15个数
# 访问多维数组中的元素
X = np.arange(15).reshape(3, 5)
# X结果:
# [[ 0 1 2 3 4]
# [ 5 6 7 8 9]
# [10 11 12 13 14]]
# 访问3×5数组中的具体数值
X[0, 0] #结果:0
X[2, 2] #结果:12
# numpy的切片访问
X = np.arange(15).reshape(3, 5)
# X结果:
# [[ 0 1 2 3 4]
# [ 5 6 7 8 9]
# [10 11 12 13 14]]
X[:2, :3]
# 结果:
# [[0 1 2]
# [5 6 7]]
# 解释:这里可以理解为选取X的前2行的前3列数据
# numpy中矩阵值的改变会影响整个子矩阵
X = np.arange(15).reshape(3, 5)
subX = X[:2, :3]
subX[0, 0] = 100
# 这里讲subX的[0, 0]项修改值为100,但是同时也影响了X的[0, 0]项也变成了100
# 这里可以理解为他们用了相同地址,类似于引用
# 如果想讲其中一部分赋值给一个新的变量,就要用到copy函数
newSubX = X[:2, :3].copy()
# 新的newSubX就和原先的X没有关系了
# Reshape的使用:变换维度但不会变原数据 所以如果要用新数据则要利用新变量接收
# 可将一维数组的10个边变成2行5列的矩阵
x = np.arange(10)
x.reshape(2, 5)