【Python】知识点零碎学习1


列表

复制代码
nums=[1,2,3]

列表创建:

复制代码
res = [0] * (2 * n)  #创建长度为2n的列表

列表拼接:

复制代码
nums+nums#[1,2,3,1,2,3]

引用赋值:

复制代码
res = nums

resnums 指向同一个列表(不是复制新列表),修改一方会影响另一方,此时 res 的长度和 nums 完全一致


string.rsplit

string.rsplit(separator , max):从右侧开始将字符串拆分为列表

|-------------|---------------------------------|
| separator | 可选,分割字符串时要使用的分隔符,默认为空白。 |
| max | 可选,指定要执行的拆分数,默认值为 -1,即"所有出现次数"。 |

例:

复制代码
module, cls = string.rsplit(".", 1)#拆分为模块路径和类名

string = 'ldm.models.diffusion.ddpm.LatentDiffusion'

**运行结果:**module='ldm.models.diffusion.ddpm' cls='LatentDiffusion'


随机数生成

**torch.rand():**生成均匀分布的[0,1]之间的随机数,接收一个形状参数shape,返回指定形状的张量

复制代码
torch.rand((3,4))

**torch.randn:**生成标准正态分布的随机数,即均值为0,方差为1。接收一个形状参数shape,返回指定形状的张量。默认类型torch.float32。

torch.randint(low, high, shape): 生成指定范围内的随机整数,low是最小值,high是最大值。包括low,不包括high。在 PyTorch 全局默认数据类型为torch.float32的前提下,该函数返回的张量的数据类型仍为torch.int64

**torch.randperm(n):**生成从0到n-1的随机整数排列,每个整数只出现一次。接受一个参数n,返回一个长度为n的张量。


torch.stack(tensors,dim=0)

torch.stack(tensors,dim=0):在新的维度上对张量进行拼接。

tensors:需要连接的张量序列(python的序列数据只有list和tuple),序列内部分张量元素形状shape必须相等。连接后张量的维度会比输入张量高 1 维

复制代码
T1 = torch.tensor([[1, 2, 3],
        		[4, 5, 6],
        		[7, 8, 9]])
T2 = torch.tensor([[10, 20, 30],
        		[40, 50, 60],
        		[70, 80, 90]])
R0 = torch.stack((T1, T2), dim=0)
print("R0:\n", R0)
print("R0.shape:\n", R0.shape)
"""
R0:
 tensor([[[ 1,  2,  3],
         [ 4,  5,  6],
         [ 7,  8,  9]],

        [[10, 20, 30],
         [40, 50, 60],
         [70, 80, 90]]])
R0.shape:
 torch.Size([2, 3, 3])
"""

torch.argmax

**torch.argmax(input) → LongTensor:**返回输入tensor中最大值的索引。输入张量无论有几维,都先reshape为一位,然后返回这个一维向量中最大值的索引;如果有多个最大值,则返回第一个索引。

**torch.argmax(input, dim, keepdim=False)→ LongTensor:**返回其他所有维在dim这个维度上的索引,因此dim表示的维度会消失(就是变成1)

例:input是[a,b]维大小的张量,

若dim=0,返回的值是每一列的最大值在第几行,最后得到(1,b)的二维矩阵,所以行的维度消失了

若dim=1,返回的值是每一行的最大值在第几列,最后得到(a,1)的二维矩阵

复制代码
import torch
x = torch.randn(2,3,4)
y = torch.argmax(x,dim=0)#dim=0表示将dim=0这个维度大小由2压缩成1,然后找到dim=0这两个值中最大值的索引,这个索引表示dim=0维索引标号
x,x.shape,y,y.shape

输出结果如下:
(tensor([[[-1.4430,  0.0306, -1.0396,  0.1219],
          [ 0.1016,  0.0889,  0.8005,  0.3320],
          [-1.0518, -1.4526, -0.4586, -0.1474]],

         [[ 1.2274,  1.5806,  0.5444, -0.3088],
          [-0.8672,  0.3843,  1.2377,  2.1596],
          [ 0.0671,  0.0847,  0.5607, -0.7492]]]),
 torch.Size([2, 3, 4]),
 tensor([[1, 1, 1, 0],
         [0, 1, 1, 1],
         [1, 1, 1, 0]]),
 torch.Size([3, 4]))

numpy.intersect1d

numpy.intersect1d(arr1, arr2, assume_unique=False, return_indices=False ):查找两个数组的交集

默认返回一维数组,返回两个数组中重复的元素

若assume_unique=True,代表输入的两个数组是已经从小到大排好序且没有重复元素的数组;如果默认False,会自动对数组进行排序和去重然后再找交际

若return_indices=True,返回元组,返回元素在两个数组中的索引,(intersect, indices_ar1, indices_ar2)

复制代码
np.intersect1d([1, 3, 4, 3], [3, 1, 2, 1])		# array([1, 3])

seed_everything(1)

把各种随机数生成器的"种子(seed)"统一设为 1

在 PyTorch Lightning 里,seed_everything(1) 通常会:

  • random.seed(1):Python 自带 random

  • numpy.random.seed(1):NumPy 随机

  • torch.manual_seed(1):CPU 上的 torch 随机

  • torch.cuda.manual_seed_all(1):GPU 上的 torch 随机(如果有 CUDA)

相关推荐
layman05281 小时前
在python中受限于GIL,进程中只允许一个线程处于允许状态,多线程无法充分利用CPU多核
开发语言·python
多恩Stone1 小时前
【3DV 进阶-10】Trellis 中的表示 SLat 理解(1)
人工智能·python·算法·3d·aigc
京井1 小时前
从中序与后序遍历序列构造二叉树解题思路
c语言·算法
Han.miracle1 小时前
算法--003快乐数
数据结构·算法·快乐数
CHANG_THE_WORLD1 小时前
Python容器转换与共有函数详解
网络·python·rpc
高洁011 小时前
循环神经网络讲解
人工智能·python·神经网络·机器学习·transformer
子午2 小时前
【中草药识别系统】Python+TensorFlow+Django+人工智能+深度学习+卷积神经网络算法
人工智能·python·深度学习
数据门徒2 小时前
《人工智能现代方法(第4版)》 第4章 复杂环境中的搜索 学习笔记
人工智能·算法
永远都不秃头的程序员(互关)2 小时前
查找算法深入分析与实践:从线性查找到二分查找
数据结构·c++·算法