目录
assert
update()
len()
range()
torchvision.transforms.Compose(transforms)
torchvision.transforms.ToTensor()
Python split()方法
Python 函数 定义 调用 参数传递 匿名函数 return 语句 变量作用域 全局变量和局部变量
定义
函数调用
参数
匿名函数
pytorch常见运算
1 矩阵与标量
2 哈达玛积
3 矩阵乘法
4幂与开方
5对数运算
6近似值运算
7剪裁运算
http://c.biancheng.net/view/2219.html
assert又称断言语句,可以看做是功能缩小版的 if 语句,它用于判断某个表达式的值,如果值为真,则程序可以继续往下执行;反之,Python 解释器会报 AssertionError 错误。语法格式:
if 表达式==True: 程序继续执行 else: 程序报 AssertionError 错误明明 assert 会令程序崩溃,为什么还要使用它呢?这是因为,与其让程序在晚些时候崩溃,不如在错误条件出现时,就直接让程序崩溃,这有利于我们对程序排错,提高程序的健壮性。因此,assert 语句通常用于检查用户的输入是否符合规定,还经常用作程序初期测试和调试过程中的辅助工具。eg.
mathmark = int(input()) #断言数学考试分数是否位于正常范围内 assert 0 <= mathmark <= 100 #只有当 mathmark 位于 [0,100]范围内,程序才会继续执行 print("数学考试分数为:",mathmark)https://www.runoob.com/python/att-dictionary-update.html
Python 字典(Dictionary) update() 函数把字典dict2的键/值对更新到dict里。语法格式:
dict.update(dict2)dict2 -- 添加到指定字典dict里的字典。该方法没有任何返回值。
用 update 更新字典 a,会有两种情况:
(1)有相同的键时:会使用最新的字典 b 中 该 key 对应的 value 值。 (2)有新的键时:会直接把字典 b 中的 key、value 加入到 a 中 eg. a = {1: 2, 2: 2} b = {1: 1, 3: 3} a.update(b) print(a) #输出{1: 1, 2: 2, 3: 3}https://zhuanlan.zhihu.com/p/59403281 作用:返回字符串、列表、字典、元组等长度 语法:
len(str)参数: str:要计算的字符串、列表、字典、元组等 返回值:字符串、列表、字典、元组等元素的长度,eg.
#计算字符串长度 s = "hello word" print(len(s))#10 #计算字典的键值对数 dict = {'num':777,'name':"anne"} print(len(dict))#2 #计算元组中元素个数 t = ('G','o','o','d') print(len(t))#4 #计算列表长度 str= ['h','e','l','l','o'] print(len(str))#5range()是python内置函数它能返回一系列连续增加的整数,它的工作方式类似于分片,可以生成一个列表对象。
range函数大多数时常出现在for循环中,在for循环中可做为索引使用。其实它也可以出现在任何需要整数列表的环境中,
在python 3.0中range函数是一个迭代器。range()函数内只有一个参数,则表示会产生从0开始计数的整数列表
语法
range(start, stop[, step])参数说明:
start: 计数从 start 开始。默认是从 0 开始。例如range(5)等价于range(0, 5);stop: 计数到 stop 结束,但不包括 stop。例如:range(0, 5) 是[0, 1, 2, 3, 4]没有5step:步长,默认为1。例如:range(0, 5) 等价于 range(0, 5, 1) >>>range(10) # 从 0 开始到 10 [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] >>> range(1, 11) # 从 1 开始到 11 [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] >>> range(0, 30, 5) # 步长为 5 [0, 5, 10, 15, 20, 25] >>> range(0, 10, 3) # 步长为 3 [0, 3, 6, 9] >>> range(0, -10, -1) # 负数 [0, -1, -2, -3, -4, -5, -6, -7, -8, -9] >>> range(0) [] >>> range(1, 0) []https://pytorch-cn.readthedocs.io/zh/latest/torchvision/torchvision-transform/
将多个transform组合起来使用。transforms: 由transform构成的列表。eg.https://www.programcreek.com/python/example/104832/torchvision.transforms.Compose
def load_data(root_path, dir, batch_size, phase): transform_dict = { 'src': transforms.Compose( [transforms.RandomResizedCrop(224), transforms.RandomHorizontalFlip(), transforms.ToTensor(), transforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225]), ]), 'tar': transforms.Compose( [transforms.Resize(224), transforms.ToTensor(), transforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225]), ])} data = datasets.ImageFolder(root=root_path + dir, transform=transform_dict[phase]) data_loader = torch.utils.data.DataLoader(data, batch_size=batch_size, shuffle=True, drop_last=False, num_workers=4) return data_loadersrc集合了四种操作 tar 集合了三种操作
把PIL或者numpy转换成Tensor
https://www.runoob.com/python/att-string-split.html
Python split() 通过指定分隔符对字符串进行切片,如果参数 num 有指定值,则分隔 num+1 个子字符串 ,语法
str.split(str="", num=string.count(str))参数说明:
str -- 分隔符,默认为所有的空字符,包括空格、换行(\n)、制表符(\t)等。num -- 分割次数。默认为 -1, 即分隔所有。 str = "Line1-abcdef \nLine2-abc \nLine4-abcd"; print(str.split( )); # 以空格为分隔符,包含 \n print(str.split(' ', 1 )); # 以空格为分隔符,分隔成两个 #['Line1-abcdef', 'Line2-abc', 'Line4-abcd'] #['Line1-abcdef', '\nLine2-abc \nLine4-abcd'] #以 # 号为分隔符,指定第二个参数为 1,返回两个参数列表。 txt = "Google#Runoob#Taobao#Facebook" x = txt.split("#", 1)# 第二个参数为 1,返回两个参数列表 print(x) #['Google', 'Runoob#Taobao#Facebook']https://www.runoob.com/python/python-functions.html
使用
functionname( parameters )python 中一切都是对象,严格意义我们不能说值传递还是引用传递,我们应该说传不可变对象和传可变对象。
python 函数的参数传递:
不可变类型:类似 c++ 的值传递,如 整数、字符串、元组。如fun(a),传递的只是a的值,没有影响a对象本身。比如在 fun(a)内部修改 a 的值,只是修改另一个复制的对象,不会影响 a 本身。
可变类型:类似 c++ 的引用传递,如 列表,字典。如 fun(la),则是将 la 真正的传过去,修改后fun外部的la也会受影响
以下是调用函数时可使用的正式参数类型:
必备参数关键字参数默认参数不定长参数必备参数
必备参数须以正确的顺序传入函数。调用时的数量必须和声明时的一样。
调用printme()函数,你必须传入一个参数,不然会出现语法错误:
关键字参数
关键字参数和函数调用关系紧密,函数调用使用关键字参数来确定传入的参数值。
使用关键字参数允许函数调用时参数的顺序与声明时不一致,因为 Python 解释器能够用参数名匹配参数值。
默认参数
调用函数时,默认参数的值如果没有传入,则被认为是默认值
不定长参数
你可能需要一个函数能处理比当初声明时更多的参数。加了星号(*)的变量名会存放所有未命名的变量参数
#有时间再写python 使用 lambda 来创建匿名函数。
lambda只是一个表达式,函数体比def简单很多。lambda的主体是一个表达式,而不是一个代码块。仅仅能在lambda表达式中封装有限的逻辑进去。lambda函数拥有自己的命名空间,且不能访问自有参数列表之外或全局命名空间里的参数。虽然lambda函数看起来只能写一行,却不等同于C或C++的内联函数,后者的目的是调用小函数时不占用栈内存从而增加运行效率。语法
lambda [arg1 [,arg2,.....argn]]:expressioneg.
add = lambda x,y:x+y print(add(3,4))#7torch.mul()是*;torch.div()其实就是/;torch.add就是+;torch.sub()就是-。
torch.mm();torch.matmul();@
幂运算 a**n ,torch.pow(a, n); 开方运算可以用torch.sqrt(),当然也可以用a**(0.5)
自然对数 torch.log(a)
torch.log2(a) ;
torch.log10(a)
.ceil() 向上取整; .floor()向下取整; .trunc()取整数; .frac()取小数; .round()四舍五入
a.clamp(min,max)