目录
1,类方法
@staticmethod,在类中使用,用于某函数之前,表明该函数是静态函数
类中的静态函数无需实例化类后使用。静态函数不需要表示自身对象的self和自身类的cls参数,就跟使用函数一样。
类中的实例方法必须传入参数self,表示该类的一个实例。
#!/usr/bin/python
# -*- coding: UTF-8 -*-
class C(object):
@staticmethod
def f():
print('runoob');
C.f(); # 静态方法无需实例化
cobj = C()
cobj.f() # 也可以实例化后调用
2,argparse模块
add_argument
- add_argument:读入命令行参数,该调用有多个参数
- ArgumentParser.add_argument(name or flags…[, action][, nargs][, const][, default][, type][, choices][, required][, help][, metavar][, dest])
name or flags:是必须的参数,该参数接受选项参数或者是位置参数(一串文件名)
nargs: 指定该参数接受传入的参数数量
- 当选项接受1个或者不需要参数时指定nargs=’?',当没有参数时,会从default中取值。对于选项参数有一个额外的情况,就是出现选项而后面没有跟具体参数,那么会从const中取值
- 而对于后面需要跟多个参数的情况(–foo a1 a2 a3…),则需要设置nargs=’*’
- nargs=’+'也和nargs=’*'一样,但是有一个区别当’+'时少于1个参数(没有参数)位置参数会报错误,而‘*’会使用默认值
3.inspect模块
import inspect
- inspect模块主要提供了四种用处:
1.对是否是模块、类、函数、框架进行类型检查
2.获取源码
3.获取类或者函数的参数信息
4.解析堆栈
- inspect.getfile(object): 返回对象的文件名
4,np.title()
平铺,沿着X轴、Y轴扩大矩阵
numpy.tile([0,0],(2,3))<span style="font-family: Arial, Helvetica, sans-serif;">#在列方向上重复[0,0]3次,行2次</span>
array([[0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0]])
5,python copy()
#!/usr/bin/python
# -*- coding: UTF-8 -*-
dict1 = {'user':'runoob','num':[1,2,3]}
dict2 = dict1 # 浅拷贝: 引用对象,原始数据改变,dict2改变
dict3 = dict1.copy() # 浅拷贝:深拷贝父对象(一级目录),子对象(二级目录)不拷贝,还是引用
# 修改 data 数据
dict1['user']='root'
dict1['num'].remove(1)
# 输出结果
print(dict1)
print(dict2)
print(dict3)
{'num': [2, 3], 'user': 'root'}
{'num': [2, 3], 'user': 'root'}
{'num': [2, 3], 'user': 'runoob'}
6,numpy--np.linalg用法
linalg=linear+algebra,包含很多线性代数的运算
np.linalg.norm
np.linalg.norm(x, ord=None, axis=None) :进行范数运算,范数是对向量(或者矩阵)的度量,是一个标量(scalar);
参数 | 范数类型 |
---|---|
ord=2或None | 二范数 |
ord=1 | 一范数 |
ord=np.inf | 无穷范数 |
x代表矩阵,ord为范数类型:当ord=2表示求特征值,然后求最大特征值的算术平方根,当ord=1表示求列和的最大值,当ord=∞表示求行和的最大值。【注】严格来讲,L0不属于范数,其表示向量中所有非零元素的个数,此处不予讲解。
axis为处理类型:当axis=1时表示按行向量处理,求多个行向量的范数。当axis=0时表示按列向量处理,求多个列向量的范数。当axis=None表示矩阵范数
import numpy as np
A = np.array([[3,-4],[-6,5]])
print(A)
ret_all = np.linalg.norm(A,ord=None)
print(ret_all) #ret_all返回的是2范数(平方和开根号)的值
ret_row = np.linalg.norm(A,ord=None,axis=1)
print(ret_row) #ret_row返回的是逐行2范数(平方和开根号)的值
ret_colume = np.linalg.norm(A,ord=None,axis=0)
print(ret_colume) #ret_row返回的是逐列2范数(平方和开根号)的值
ret_inf_max = np.linalg.norm(A,ord=np.Inf)
print(ret_inf_max) #ret_inf_max返回的无穷范数(元素是逐行中元素绝对值的和最大)
ret_inf_max_row = np.linalg.norm(A,ord=np.Inf,axis=1)
print(ret_inf_max_row) #ret_inf_max_row返回的是无穷范数每行元素的绝对值的最大值
ret_inf_max_colume = np.linalg.norm(A,ord=np.Inf,axis=0)
print(ret_inf_max_colume) #ret_inf_max_row返回的是无穷范数每列元素的绝对值的最大值
ret_inf_min = np.linalg.norm(A,ord=-np.Inf)
print(ret_inf_min) #ret_inf_min返回的无穷范数(元素是逐行中元素绝对值最小的值)
B = np.array([[100,-4],[-6,5]])
print(B)
ret_one = np.linalg.norm(B,ord=1)
print(ret_one) #ret_one返回的是求列的元素绝对值和的最大值
ret_one_row = np.linalg.norm(B,ord=1,axis=1)
print(ret_one_row) #ret_one_row返回的是逐行求行的元素绝对值和
ret_one_colume = np.linalg.norm(B,ord=1,axis=0)
print(ret_one_colume) #ret_one_row返回的是逐列求列的元素绝对值和
np.linalg.eigh
计算矩阵特征向量
np.linalg.inv()
矩阵求逆
np.linalg.det()
矩阵求行列式(标量)
np.linalg.matrix_power()
matrix_power(Mat, n):返回一个方阵的n次方,n>0,重复方阵和矩阵乘法计算;n=0,返回和M形状相同的恒等矩阵;n<0;计算方阵的abs(n)次幂后,求逆。
square_a=np.array([[1,-1,1],[2,2,2],[-1,0,-2]])
print(square_a)
print('.....矩阵对应元素相乘 \n {}'.format(square_a*square_a))
print('.....矩阵乘法 \n {}'.format(square_a@square_a))
print('.....矩阵乘法-二 \n {}'.format(np.dot(square_a,square_a)))
print('.......多个矩阵相乘\n{}'.format(square_a@square_a@square_a))
power_2=np.linalg.matrix_power(square_a, 2)
print(power_2)
power_3=np.linalg.matrix_power(square_a, 3)
print(power_3)
[[ 1 -1 1]
[ 2 2 2]
[-1 0 -2]]
.....矩阵对应元素相乘
[[1 1 1]
[4 4 4]
[1 0 4]]
.....矩阵乘法
[[-2 -3 -3]
[ 4 2 2]
[ 1 1 3]]
.....矩阵乘法-二
[[-2 -3 -3]
[ 4 2 2]
[ 1 1 3]]
.......多个矩阵相乘
[[-5 -4 -2]
[ 6 0 4]
[ 0 1 -3]]
[[-2 -3 -3]
[ 4 2 2]
[ 1 1 3]]
[[-5 -4 -2]
[ 6 0 4]
[ 0 1 -3]]
7,nn.init.uniform_用法
torch.nn.init.uniform(tensor, a=0, b=1)
从均匀分布U(a, b)中生成值,填充输入的张量或变量
8,__import__动态导入模块、getattr()得到属性值
__import__() 函数用于动态加载类和函数 。
如果一个模块经常变化就可以使用 __import__() 来动态载入
getattr(object, name[, default])参数
- object -- 对象。
- name -- 字符串,对象属性。
- default -- 默认返回值,如果不提供该参数,在没有对应属性时,将触发 AttributeError。
def import_class(name):
components = name.split('.')
mod = __import__(components[0])
for comp in components[1:]:
mod = getattr(mod, comp)
return mod
9, shutil.copy2
shutil
是一种高层次的文件操作工具
类似于高级API,而且主要强大之处在于其对文件的复制与删除操作更是比较支持好。
使用方法:
copy2( src, dst) 在copy上的基础上再复制文件最后访问时间与修改时间也复制过来了,类似于cp –p的东西
10,collections.defaultdict 与setdefault()
setdefault() 需提供两个参数,第一个参数是键值,第二个参数是默认值,每次调用都有一个返回值,如果字典中不存在该键则返回默认值,如果存在该键则返回该值,利用返回值可再次修改代码
defaultdict的作用: 当字典里的key不存在但被查找时,返回的不是keyError而是一个默认值
defaultdict类的初始化函数接受一个类型作为参数,当所访问的键不存在的时候,可以实例化一个值作为默认值
from collections import defaultdict
dd = defaultdict(list)
defaultdict(<type 'list'>, {})
#给它赋值,同时也是读取
dd['h'h]
defaultdict(<type 'list'>, {'hh': []})
dd['hh'].append('haha')
defaultdict(<type 'list'>, {'hh': ['haha']})
该类除了接受类型名称作为初始化函数的参数之外,还可以使用任何不带参数的可调用函数,到时该函数的返回结果作为默认值,这样使得默认值的取值更加灵活。
>>> from collections import defaultdict
>>> def zero():
... return 0
...
>>> dd = defaultdict(zero)
>>> dd
defaultdict(<function zero at 0xb7ed2684>, {})
>>> dd['foo']
0
>>> dd
defaultdict(<function zero at 0xb7ed2684>, {'foo': 0})
from collections import defaultdict
words = ['hello', 'world', 'nice', 'world']
#使用lambda来定义简单的函数
counter = defaultdict(lambda: 0)
for kw in words:
counter[kw] += 1
11. numpy np.load
@set_module('numpy')
def load(file, mmap_mode=None, allow_pickle=False, fix_imports=True,
encoding='ASCII'):
Load arrays or pickled objects from ``.npy``, ``.npz`` or pickled files.
- file: file-like object, string, or pathlib.Path
要读取的文件;类似文件的对象必须支持
seek()
和read()
方法;Pickled files 还需要支持"readline()"方法
- mmap_mode : {None, 'r+', 'r', 'w+', 'c'}, optional;
如果不是None,则使用给定的模式对文件进行内存映射,内存映射的矩阵保留在磁盘上。但是,可以像访问任何ndarray一样 对其进行访问和切片。内存映射对于访问大文件的小片段而不将整个文件读入内存特别有用。
返回的是 result : array, tuple, dict, etc
返回文件中的数据。 对于.npz文件,必须关闭返回的NpzFile类实例,以避免泄漏文件描述符。