pytorch基础 一、numpy基础

pytorch从入门到“入魔”

 一、numpy基础

Python本身含有列表(list)和数组(array),但对于大数据来说,这些结构是有很多不足的。
list的元素可以是任何对象,因此列表中所保存的是对象的指针。
array对象可以直接保存数值,但是由于它不支持多维,在上面的函数也不多,因此也不适合做数值运算。
Numpy提供了两种基本的对象:

  • ndarray(N-dimensional Array Object)
  • ufunc(Universal Function Object)

ndarray是存储单一数据类型的多维数组,而ufunc则是能够对数组进行处理的函数。

Numpy的主要特点

  • ndarray,快速节省空间的多维数组,提供数组化的算术运算和高级的广播功能。
  • 使用标准数学函数对整个数组的数据进行快速运算,且不需要编写循环。
  • 读取/写入磁盘上的阵列数据和操作存储器映像文件的工具。
  • 线性代数、随机数生成和傅里叶变换的能力。

Numpy主要内容

  • 如何生成Numpy数组。
  • 如何存取元素。
  • Numpy的算术运算。
  • 数组变形。
  • 批量处理。
  • Numpy的通用函数。
  • Numpy的广播机制。

生成Numpy数组

1.从已有数据中创建数组

直接对Python的基础数据类型(如列表、元组等)进行转换来生成ndarray:

# 导入numpy
import numpy as np 

# 生成numpy数组
# 从已有数据中创建数组
# 1)将列表转换成ndarray
lst1 = [3.14, 2.17, 0, 1 , 2]
nd1 = np.array(lst1)
print(nd1)
#输出结果为: [3.14 2.17 0.   1.   2.  ]
print("数据类型为:",type(nd1))
#输出结果为:数据类型为: <class 'numpy.ndarray'>

# 2)嵌套列表可以转成多维ndarray
# import numpy as np
lst2 = [[3.14, 2.17, 0, 1, 2], [1, 2, 3, 4, 5]]
nd2 = np.array(lst2)
print(nd2)
#输出结果为: [[3.14 2.17 0.   1.   2.  ]
#             [1.   2.   3.   4.   5.  ]]
print("数据类型为:",type(nd2))
#输出结果为:数据类型为: <class 'numpy.ndarray'>

2..利用random模块生成数组

np.random 模块常用函数:

函数描述
np.random.random0到1之间随机数
np.random.uniform均匀分布的随机数
np.random.randn标准正态分布的随机数
np.random.normal正态分布
np.random.randint随机整数
np.random.shuffle随机打乱顺序
np.random.seed设置随机数种子
random_sample生成随机的浮点数

具体使用实例:


# 利用random模块生成数组
# 导入numpy
import numpy as np

# 生成0~1之间的随机数
nd3 = np.random.random([3,3])
print("生成3*3的矩阵数据:\n",nd3)
# 生成3*3的矩阵数据:
#  [[0.48614176 0.27868547 0.50392416]
#  [0.71698562 0.51553353 0.37778331]
#  [0.20340666 0.57332978 0.46538621]]
print("nd3的形状为:",nd3.shape)
# nd3的形状为:(3, 3)


# 为了每次都生成同一份数据,可以指定一个随机种子,使用shuffle函数打乱生成的随机数。
# import numpy as np

# 指定随机种子
np.random.seed(123)
# 生成标准正态的随机数
nd4 = np.random.randn(2,3)
print("nd4: ", nd4)
# nd4:  [[-1.0856306   0.99734545  0.2829785 ]
#  [-1.50629471 -0.57860025  1.65143654]]
# 随机打乱数据
np.random.shuffle(nd4)
print("随机打乱后的数据: ")
print(nd4)
print("数据类型为:",type(nd4))
# 随机打乱后的数据:
# [[-1.50629471 -0.57860025  1.65143654]
#  [-1.0856306   0.99734545  0.2829785 ]]
# 数据类型为: <class 'numpy.ndarray'>

3.创建特定形状的多维数组

参数初始化时,有时需要生成一些特殊矩阵,如全是0或1的数组或矩阵,这时我们可以利用np.zeros、np.ones、np.diag来实现。

函数描述
np.zeros((3,4))创建3 x 4的元素全为0的数组
np.ones((3,4))创建3 x 4的元素全为1的数组
np.empty((2,3))创建2 x 3的空数组,但是空数据中的值不是0,是未初始化的垃圾值
np.zeros_like(ndarr)以ndarr 相同维度创建元素全为0数组
np.ones_like(ndarr)以ndarr 相同维度创建元素全为1数组
np.empty_like(ndarr)以ndarr 相同维度创建空数组
np.eye(5)创建一个5 x 5矩阵,对角线为1,其余为0
np.full((3,5), 666)创建3 x 5的元素全为666的数组

具体使用示例:

数组变形

由于不同模型所接收的输入格式不一样,往往需要先对其进行一系列的变形和运算,从而将数据处理成模型要求的格式。在矩阵或者数组的运算中,经常会遇到需要把多个向量或矩阵按某轴方向合并,或展平(如在卷积或循环神经网络中,在全连接层之前,需要把矩阵展平)的情况。

1.改变数组的形状

numpy中改变向量形状的一些函数:
函数描述
arr.reshape改变向量维度,不改变向量本身
arr.resize改变向量维度,改变向量本身
arr.T对向量进行转置
arr.ravel对向量展平,即将多维数组变成1维,不会产生原数组的副本
arr.flatten对向量展平,即将多维数组变成1维,返回原数组的副本
arr.squeeze**只能对维数为1的维度降维。**对多维数组使用不会产生影响
arr.transpose对高维矩阵队形轴兑换

具体使用示例:

2.合并数组

Numpy中数组合并方法
函数描述
np.append内存占用大
np.concatenate没有内存问题
np.stack沿着新的轴加入一系列数组
np.hstack堆栈数组垂直顺序(行)
np.vstack堆栈数组垂直顺序(列)
np.dstack堆栈数组按顺序深入(沿第3维)
np.vsplit将数组分解成垂直的多个子数组的列表

注意:

  • append,concatenate以及stack都有一个axis参数,用于控制数组的合并方式是按行还是按列。
  • 对于append和concatenate,待合并的数组必须有相同的行数或列数。
  • stack,hstack,dstack要求待合并的数组要有相同形状。

具体使用示例:

通用函数

Numpy的另一个对象通用函数(ufunc,universal function),它是一种能对数组的每个元素进行操作的函数。
许多ufunc函数都是用C语言级别实现的,因此它们的计算速度非常快。
此外,它们比math模块中的函数更灵活。math模块的输入一般是标量,但Numpy中的函数可以是向量或矩阵,而利用向量或矩阵可以避免使用循环语句,这点在机器学习、深度学习中非常重要。

Numpy中常用的几个通用函数
函数使用方法
sqrt计算序列化数据的平方根
sin, cos三角函数
abs绝对值
dot矩阵运算
log, log10, log2对数
exp指数
cumsum, cumproduct累计求和、求积
sum求和
mean求均值
median求中位数
std求标准差
var求方差
corrcoef求相关系数

具体使用示例:

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值