列表
nums=[1,2,3]
列表创建:
res = [0] * (2 * n) #创建长度为2n的列表
列表拼接:
nums+nums#[1,2,3,1,2,3]
引用赋值:
res = nums
res 和 nums 指向同一个列表(不是复制新列表),修改一方会影响另一方,此时 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)