【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)

相关推荐
星空椰40 分钟前
快速掌握FastAPI:高效构建Web API
python·fastapi
塔尖尖儿40 分钟前
Python中range()到底是什么演示
python
Ethan-D1 小时前
#每日一题19 回溯 + 全排列思想
java·开发语言·python·算法·leetcode
Benny_Tang1 小时前
题解:CF2164C Dungeon
c++·算法
仙俊红1 小时前
LeetCode174双周赛T3
数据结构·算法
橘颂TA2 小时前
【剑斩OFFER】算法的暴力美学——LeetCode 733 题:图像渲染
算法·leetcode·职场和发展
不穿格子的程序员2 小时前
从零开始写算法——回溯篇2:电话号码的字母组合 + 组合总和
算法·深度优先·回溯
仍然.2 小时前
JavaDataStructure---二叉搜索树,哈希表,Map和Set
数据结构·散列表
持梦远方2 小时前
算法剖析1:摩尔投票算法 ——寻找出现次数超过一半的数
c++·算法·摩尔投票算法