Conda、pip、Python、Latex、Linux零碎技巧
Conda、pip
conda create -n B --clone A
克隆A环境为B- opencv安装,请参考pypi官网说明
- mmcv-full使用pip安装时编译出错,需安装当前虚拟环境pytorch对应的cuda的NVIDIA官网版本,并确认系统环境变量CUDA_PATH指向该版本(安装程序会自动设置,一般不需要手动修改)
- conda命令行换盘符
d:
,在任意路径下输入目标盘符加冒号,即可更换到目标盘的根目录下
Python
-
with关键字:代替try-finally,用于处理文件,释放资源
-
for line in f: print line :通过迭代器访问文件每一行。
-
shape
- (3,1)二维数组,三行一列
- (3,)一维数组,长度位3
-
pandas.DataFrame.values不如使用pandas.DataFrame.to_numpy,DataFrame转numpy
-
Python 类内方法
class Test(): a = 20 _b = 21 # 类外无法访问,类内可以通过类名或对象(self等)访问 __c = 22 def __init__(self): # 类内类外都无法通过类名访问,类内可通过对象(self等)访问 self.aa = 10 self._bb = 11 # 类外无法访问 self.__cc = 12 @classmethod def cls_method(cls): print("class") # 参数不需要加 self @staticmethod def sta_method(): print("static") # 类调用需要显式传对象参数 def obj_method(self): print("object") # 类调用需要显式传对象参数 def _pri_method(self): print("protect") # 类外无法访问,类内可以用类名或对象(self等)访问 def __pri_method(self): print("private2") # 通过类名或对象(self等)调用所有函数 def in_method(self): print("in==>") test_in = Test() Test.cls_method() Test.sta_method() Test.obj_method(test_in) Test._pri_method(test_in) Test.__pri_method(test_in) print(Test.a) print(Test._b) print(Test.__c) # print(Test.aa) # 错误 # print(Test._bb) # 错误 # print(Test.__cc) # 错误 test_in.cls_method() test_in.sta_method() test_in.obj_method() test_in._pri_method() test_in.__pri_method() print(test_in.a) print(test_in._b) print(test_in.__c) print(test_in.aa) print(test_in._bb) print(test_in.__cc) self.cls_method() self.sta_method() self.obj_method() self._pri_method() self.__pri_method() print(self.a) print(self._b) print(self.__c) print(self.aa) print(self._bb) print(self.__cc) print("<==in") test = Test() Test.cls_method() Test.sta_method() Test.obj_method(test) Test._pri_method(test) # 警告 # Test.__pri_method() # 错误 print(Test.a) print(Test._b) # print(Test.__c) # 错误 # print(Test.aa) # 错误 # print(Test._bb) # 错误 # print(Test.__cc) # 错误 Test.in_method(test) test.cls_method() test.sta_method() test.obj_method() test._pri_method() # 警告 # test.__pri_method() # 错误 print(test.a) print(test._b) # print(test.__c) # 错误 print(test.aa) print(test._bb) # print(test.__cc)# 错误 test.in_method()
-
按最后一列groupby
# 先排序 train_draw = train_draw[train_draw[:, -1].argsort()] # 后分割 train_draw = np.array(np.split(train_draw, np.unique(train_draw[:, -1], return_index=True)[1][1:]))
-
函数静态类型定义,
:
后表示形参类型,->
后表示返回类型def fun(a: int) -> int: return a + 1
-
linux切割路径字符串
os.path.dirname(path).split('/')[-1]
,/the/input/path
得到path
-
windows切割路径字符串
os.path.dirname(path).split('\\')[-1]
,\the\input\path
得到path
-
预训练模型下载缓慢可以将以下代码
model = torch.hub.load('facebookresearch/detr', 'detr_resnet50', pretrained=True) model.eval()
替换为如下形式,二者等价,需要手动git克隆仓库并参照hubconf.py文件中的函数,下载并加载权重
model = torch.hub.load('./detr', 'detr_resnet50', pretrained=False,source='local') model.load_state_dict(torch.load('detr-r50-e632da11.pth')["model"]) model.eval()
Latex
-
拖式计算,对齐等号
& 对齐标志 \\ 换行(必须有换行,否则对齐无效) $$ \begin{aligned} CPU时间&=(CPU执行周期数+存储器停顿周期数)*时钟周期时间\\ &=(CPU执行周期数+访存次数*不命中率*不命中开销)*时钟周期时间\\ &=IC*(CPI_{execution}+每条指令平均访存次数*不命中率*不命中开销)*时钟周期时间 \end{aligned} $$
C P U 时间 = ( C P U 执行周期数 + 存储器停顿周期数 ) ∗ 时钟周期时间 = ( C P U 执行周期数 + 访存次数 ∗ 不命中率 ∗ 不命中开销 ) ∗ 时钟周期时间 = I C ∗ ( C P I e x e c u t i o n + 每条指令平均访存次数 ∗ 不命中率 ∗ 不命中开销 ) ∗ 时钟周期时间 \begin{aligned} CPU时间&=(CPU执行周期数+存储器停顿周期数)*时钟周期时间\\ &=(CPU执行周期数+访存次数*不命中率*不命中开销)*时钟周期时间\\ &=IC*(CPI_{execution}+每条指令平均访存次数*不命中率*不命中开销)*时钟周期时间 \end{aligned} CPU时间=(CPU执行周期数+存储器停顿周期数)∗时钟周期时间=(CPU执行周期数+访存次数∗不命中率∗不命中开销)∗时钟周期时间=IC∗(CPIexecution+每条指令平均访存次数∗不命中率∗不命中开销)∗时钟周期时间
-
acmart class下的tex包的baselinestretch问题
\let\savedbaselinestretch\baselinestretch \usepackage[UTF8]{ctex} \let\baselinestretch\savedbaselinestretch
Linux
- 根据进程号查看命令运行文件的路径
pwdx PID