[动手学深度学习]NumPy库

学习笔记来源于NumPy官网:NumPy documentation — NumPy v1.25 Manual

可能涉及使用jupyter的内容,即变量可以直接打印,可能会和pycharm存在差异

目录

1. 导入

2. 关于数组的函数或类

2.1. 绘图函数的矩阵/数组输入类型

2.2. 数组的创建和添加

2.3. 数组的合并和排序

2.4. 数组的形状和大小

2.5. 数组的堆叠

2.6. 数组的快捷操作

2.7. 数组的反转

3. 随机数

3.1. 计算机中的随机数

3.2. NumPy生成随机数

4. 唯一数

4.1. 获取唯一数

1. 导入

import numpy as np
import torch

2. 关于数组的函数或类

2.1. 绘图函数的矩阵/数组输入类型

(1)numpy.matrix:矩阵

        ①numpy.matrix的参数

class numpy.matrix(data, dtype=None, copy=True)

        ②⭐官网Note:不再建议使用此类,即使对于线性代数也是如此。而是使用常规数组。该类可能会在未来被删除。

        ③numpy.matrix的返回:从类似数组的对象或数据字符串返回矩阵。 矩阵是保留其 2-D 性质的专用 2-D 数组 通过操作。它具有某些特殊的运算符,例如(矩阵乘法)和(矩阵幂)。

        ④示例

(2)numpy.asarray:将输入转换为数组

        ①numpy.asarray的参数

numpy.asarray(a, dtype=None, order=None, *, like=None)

        ②numpy.asarray的返回值:数组解释 a.如果输入,则不执行复制 已经是一个具有匹配 dtype 和顺序的 ndarray。如果 a 是 NDarray的子类,返回一个基类NDARRAY。

        ③示例(事实证明和上面那个看上去一样,只是应该格式不一样)

2.2. 数组的创建和添加

(1)np.array()

        ①一维数组

a = np.array([1, 2, 3, 4, 5, 6])

        ②二维数组

a = np.array([[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12]])

        ③高的就不一一例举了

(2)np.zeros() 或 np.ones():创建括号中大小的为全0或全1的数组

(3)np.empty():创建一个为括号内数大小的全部数为随机数(取决于内存)的数组

(4)np.arange():其中数字可以分别为第一个数,最后一个数,步长,从而建立数组

(5)np.linspace():第一个参数是开始数,第二个是结束值,num是生成多少个数(所以和刚刚的arange会有差异,相当于linspace的步进是机器算的)

        ①参数

numpy.linspace(start, stop, num=50, endpoint=True, retstep=False, dtype=None, axis=0)

        ②返回值

(6)指定数据类型(就是在后面加dtype)

        ①代码示例

x = np.ones(2, dtype=np.int64)

(7)np.newaxis:添加新轴

        ①代码示例

a = np.array([1, 2, 3, 4, 5, 6])
a2 = a[np.newaxis, :]
a3 = a[:, np.newaxis]

a.shape,a2.shape,a3.shape

        ②结果展示

(6,),(1, 6),(6, 1)

(8)np.expand_dims():在指定位置插入新轴来扩展阵列

        ①代码示例

a4 = np.expand_dims(a, axis=1)
a5 = np.expand_dims(a, axis=0)

a4.shape,a5.shape

        ②结果展示

(6, 1),(1, 6)

2.3. 数组的合并和排序

(1)np.sort():排序(好像默认升序)

        ①参数

numpy.sort(a, axis=-1, kind=None, order=None)

        ②参数axis:默认-1,如果没有的话这个数组会在排序前被展平

        ③参数kind:默认为快排,但是还有其他的可以选,如 'mergesort', 'heapsort', 'stable'

        ④参数order:可选str或list of str,区别是按字符串还是字段

(2)np.ndarray.sort():就地排序

        ①参数

ndarray.sort(axis=-1, kind=None, order=None)

(3)np.concatenate():把两个数组连起来,但是需要注意的是写出来有俩括号

        ①参数

numpy.concatenate((a1, a2, ...), axis=0, out=None, dtype=None, casting="same_kind")

2.4. 数组的形状和大小

(1)数组名.ndim:显示出数组的轴数或尺寸(因为是方法所以是".")

(2)数组名.size:显示出数组元素中的总数

(3)数组名.shape:显示出数组的形状

(4)数组名.reshape:更改形状,但是要保证元素总个数一样,其中也有个order参数可以控制按指定的索引顺序读/写元素

2.5. 数组的堆叠

(1)这个stack和torch.cat((x,y),dim= )应该是一样的道理

(2)np.vstack():垂直堆叠

        ①代码示例

a1 = np.array([[1, 1],
               [2, 2]])

a2 = np.array([[3, 3],
               [4, 4]])

np.vstack((a1, a2))

        ②结果展示

(3)np.hstack():水平堆叠

        ①代码示例

np.hstack((a1, a2))

        ②结果展示

(4)np.hsplit:数组拆分(偷个懒)

(5)zip():将单个列表打包成更多维的列表

        ①元素不可以!如n1 = 0和n2 = [1, 2]是不可以一起打包的!

        ②测试总样本代码

c = [0]

x = [1, 2]

y = [3, 4, 5]

z = [6, 7, 8, 9]

h = [[1,2,3,4],[5,6,7,8]]


n1 = zip(c,x) #测试不同大小的列表的压缩,但不用list表示

n2 = list(zip(c,x)) #将不同大小的列表压缩并用list表示

n3 = list(zip(y,z)) #ditto

n4 = list(zip(z,h)) #将不同维度的列表压缩

n5 = list(zip(x)) #单个压缩

n6 = list(zip()) #空压缩

n7 = list(zip(*n3)) #猜测是解压缩,答案需要看输出

        ③测试结果展示

2.6. 数组的快捷操作

(1)数组名.max, 数组名.min, 数组名.sum:快捷求最大,最小,和

(2)List类型测试

        ①代码

x = [1, 2, 3, 4]

        ②结果展示

光荣地失败了!说明max不能对列表用

(3)一维np.array测试

        ①代码

y = np.array([1, 2, 3, 4 ])

        ②结果展示

还活着!取了个最大值,看上去蛮正常的

(4)多维np.array测试(这时候会给单个数据max还是以一个列表作为元素呢?)

        ①代码

z = np.array([1,2,3,4,5,6]).reshape(1,2,3)

"""或"""

z = np.array([[[1,2,3],[4,5,6]]])

        ②结果展示

首先能很清楚地看到z确实成了三维的,然后z.max()从中截取的是元素

(5)torch.tensor测试

        ①代码(直冲二维)

h = torch.tensor([[2, 1, 4, 3], [1, 2, 3, 4], [8, 3, 2, 1]])

        ②结果展示

看上去还是返回的单个元素!但是是tensor类型的 

2.7. 数组的反转

(1)np.flip():这个和转置有点不一样,感觉是前后颠倒

        ①代码

a = np.array([1,2,3,4]) #一维
b = np.array([[1,2],[3,4]]) #二维
c = np.array([[[1,2],[3,4]]]) #三维
              
np.flip(a),np.flip(b),np.flip(c)

        ②结果展示

(2)np.transpose():维度/轴变换

        ①举个栗子,比如我现在手里有个(图片来源:numpy之transpose详解_numpy transpose_代码拖拉鸡的博客-CSDN博客

        ②按理来说,np.transpose(0,1,2)表示不变(里面的就表示维度在正常位置)

        ③但是如果改变里面的参数,如np.transpose(0,2,1),意思就是交换第一维和第二维,把数组维度变成(2,4,2),其余变换同理

3. 随机数

3.1. 计算机中的随机数

(1)用计算机的算法生成的实际上都叫伪随机数(Pseudo-random Number),它和自然的随机数有差别,但是十分近似和方便所以平时我们都用伪随机来代替真随机

3.2. NumPy生成随机数

(1)np.random.default_rng():是个随机数生成器

        ①随机数生成器代码

rng = np.random.default_rng()

        ②普通随机

        ③标准正态随机

         ④集合内随机

(2)secrets:随机数种子

        ①代码和结果

可以看出secrets.randbits()会每次生成随机的128位数,可以避免大家的随机数种子用到同样的。因此把这个大数嵌在rng里面会更有随机保证。

4. 唯一数

4.1. 获取唯一数

(1)np.unique():找到数组中所有的值(如5,5,5有三个就变成一个5)(后面那个index参数可加可不加,加了的话返回的是第一个看到的新数的下标。counts就是分别返回每个数有多少个)

        ①代码

a = np.array([1,2,3,4,5,5,6,6,6])

b,c,d = np.unique(a,return_index=True,return_counts=True)

b,c,d

        ②结果展示

 

 也适用于二维数组,同时在二维数组中还是以单个数字为元素。若要以行列为单个元素,则需要指出axis=n

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
深度学习是目前非常热门的领域,而 PyTorch 是其中最受欢迎和广泛使用的深度学习库之一。为了动手学习 PyTorch,你可以按照以下步骤进行。 首先,你需要安装 PyTorch。可以通过 PyTorch 官方网站或者使用包管理工具如 pip 或 conda 来完成安装。确保你安装的是最新版本,并根据你的操作系统和硬件环境选择合适的版本。 之后,你可以开始学习 PyTorch 的基础知识。可以借助官方文档、在线教程、博客文章或者视频教程来学习。掌握如何创建和操作张量(Tensors),了解张量的不同数据类型,例如浮点数或整数,以及如何执行各种数运算和操作。 接下来,你可以学习构建深度学习模型的基本概念。了解如何定义神经网络,包括各种不同类型的层(如全连接层、卷积层和循环层),并掌握如何连接它们以构建模型。学习如何初始化模型参数、前向传播和反向传播算法,以及如何使用优化器来调整模型参数以最小化损失函数。 进一步学习 PyTorch 中的高级功能,如数据加载和预处理,学习如何将自定义数据集加载到模型中进行训练。此外,掌握如何使用 GPU 运行模型,以加快训练速度和模型性能。 在学习过程中,最好通过动手实践来加深理解。可以尝试使用 PyTorch 来解决一些经典的深度学习问题,如图像分类、目标检测或语音识别。通过编写代码并实际运行模型,你将更好地理解和掌握 PyTorch 提供的各种功能和工具。 最后,别忘了参考和阅读相关的论文和研究工作,以了解最新的深度学习算法和技术。参加深度学习社区和论坛,与其他使用 PyTorch 的开发者交流和分享经验,这将有助于你不断提升自己的技能。 总结来说,动手学习 PyTorch 的关键是理解基本概念、构建深度学习模型,并通过实践应用来加深理解。随着不断的学习和实践,你将能够熟练地使用 PyTorch 来解决各种深度学习问题。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值