本文是自己的一些随笔,记录一些比较关键的,以后可以用到的知识点。
python中使用参数
from argparse import ArgumentParser
parser = ArgumentParser() # 创建一个解析对象
# 参数一般包括:短参数、长参数、数据类型(type)、默认值(default)、帮助信息(help)、参数值范围(choices)、是否必须(require)、action。
# action选项中常用的是 action="store_true",它表示只要运行时该变量有传参就将该变量设为True
# 具体例子如下
parser.add_argument('-b','--batch_size', type=int, default=5, help="Batch size in training.", choices=[1,2,3,4,5], require=True, action='store_true') #添加命令行参数和选项
parser.parse_args() # 进行解析
batch_size=args.batch_sise
# 若文件名为test.py,则在命令行中输入 test.py --help 即可查看所有支持的参数
python处理 json
import json
'''
主要使用两个函数:
json.dumps():用于将python的数据类型转化为json中的字符串
json.loads():用于将json中的字符串转化为python的数据类型
'''
'''
json.dumps(obj,sort_keys=False) # sort_keys参数可以用来决定转换后的json是否按key值排序
python 原始类型向 json 类型的转化对照表:
python json
--------------------------
dict object
list, tuple array
str, unicode string
int, long, float number
True true
False false
None null
'''
'''
json.loads(obj)
json 原始类型向 python 类型的转化对照表:
json python
-----------------------------
object dict
array list
string unicode
number (int) int, long
number (real) float
true True
false False
null None
'''
python中*arg和**kwargs的区别
这两个是python中的可变参数。*args
表示任意多个无名参数,它是一个tuple;**kwargs
表示任意多个关键字参数,它是一个dict。当 arg、*args、**wkargs 同时使用时,必须按照该顺序,否则会报错。
def foo(*args, **kwargs):
print 'args = ', args
print 'kwargs = ', kwargs
print '---------------------------------------'
return kwargs # 返回值是一个字典
if __name__ == '__main__':
foo(1,2,3,4)
foo(a=1,b=2,c=3)
foo(1,2,3,4, a=1,b=2,c=3)
foo('a', 1, None, a=1, b='2', c=3)
以上代码的输出为:
args = (1, 2, 3, 4)
kwargs = {}
---------------------------------------
args = ()
kwargs = {'a': 1, 'c': 3, 'b': 2}
---------------------------------------
args = (1, 2, 3, 4)
kwargs = {'a': 1, 'c': 3, 'b': 2}
---------------------------------------
args = ('a', 1, None)
kwargs = {'a': 1, 'c': 3, 'b': '2'}
---------------------------------------
python中NiBabel模块的使用
NiBabel模块可以对常见的医学和神经影像文件格式进行读写,比如.nii.gz格式的文件。
# 用pip install nibabel来安装
import nibabel as nib
img = nib.load(file_name) #加载图像
img.shape #图像形状
print(img.affine) #把图像矩阵转换为RAS+坐标系的仿射变换矩阵
print(img.header) #图像的头,包含很多信息
print(img.header.get_data_shape()) #图像矩阵的shape
print(img.header.get_data_dtype()) #图像矩阵的数据类型
img.get_data() #获取图像数据
img.affine.shape #仿射变换
img.to_filename(save_path) #保存图像
nib.save(img, save_path) #保存图像
python中的generator
generator是一个特殊的函数,它与普通函数相比有以下区别:
- generator函数包含一个以上的yield声明,用yield来返回值;
- generator函数被调用的时候,会返回一个iterator对象,但是函数并不会立即开始执行;
- __iter__()和__next__()方法被自动实现,所以可以使用next()函数对返回的此iterator对象进行迭代,也可直接使用for循环来迭代;
- 一旦一个generator 执行到yield语句,generator函数暂停,程序控制流被转移到调用方;
- 在对generator的连续调用之间,generator的本地变量和状态会被保存;
- 最终,generator函数终止,再调用generator会引发StopIteration异常;
generator函数中也允许使用return,但是return 后不允许有返回值。return和yield的区别在于,return声明彻底结束一个函数,而yield声明是暂停函数,保存它的所有状态,并且后续被调用后会继续执行。
L = [x * x for x in range(10)] #返回的是列表
g = (x * x for x in range(10)) #返回的是generator
python知识点
- 当有函数嵌套时,外层函数的返回值往往是内层函数,并且在内层函数只可以在外层函数里访问
- 通过 @property 装饰器,可以直接通过方法名来访问方法,不需要在方法名后添加一对“()”
其他知识点
- Dice 损失类似于交并比,有两个mask,记为X和Y,其Dice损失为 D i c e = 2 × X ∩ Y ∣ X ∣ + ∣ Y ∣ Dice=2\times\frac{X\cap Y}{|X|+|Y|} Dice=2×∣X∣+∣Y∣X∩Y
- WinEdt 中 Tex 编译的快捷键为
ctrl+shift+P
,当出现报错信息时 l.30 中字母 l 后面的即出错的行数,输入 e 可以定位到对应的行,输入 Enter 查看下一个错误信息,输入 s 忽略所有报错信息。 - 变形场(deformation field)是指能使流体在运动中发生形状变化,尤其是伸展(收缩)和切变的速度场。
- 用
nvidia-smi
命令查看显卡使用情况 - ubuntu查看版本信息:
lsb_release -a
,查看 CUDA 版本nvcc --version
或cat /usr/local/cuda/version.txt
- linux 编辑环境变量
vi ~/.bashrc
,使环境变量生效source ~/.bashrc
,查看环境变量中的 PATH 等echo $PATH
- 远程连接服务器离线跑代码:首先用
sudo apt-get install screen
安装 screen用screen -S screen名
创建一个 screen,然后运行程序即可,这样就可以关掉连接服务器的软件了。输入screen -ls
即可查看现有的 screen,输入screen -r 编号.screen名
就可以重新连接到 screen,需要彻底关闭 screen 时可以使用kill screen编号
即可。在screen界面中,按Ctrl+A
然后按Esc
键可以用键盘上的方向键和PageUp/PageDown键进行翻页,按Ctrl+C
退出。