记录(2019年3月15日)机器学习基础——Numpy的使用【数组的基本操作】(一)

本文详细介绍NumPy库的基础操作,包括创建各种类型的矩阵,如全零矩阵、全一矩阵及自定义矩阵;比较Python内置range与NumPy arange函数的差异;讲解linspace函数的使用;演示如何生成随机数,包括整数、矩阵及符合正态分布的随机数;并深入探讨矩阵的维度、形状、大小,以及如何访问和修改多维数组中的元素。
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)

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值