随笔-随时更新

本文是自己的一些随笔,记录一些比较关键的,以后可以用到的知识点。

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知识点

  1. 当有函数嵌套时,外层函数的返回值往往是内层函数,并且在内层函数只可以在外层函数里访问
  2. 通过 @property 装饰器,可以直接通过方法名来访问方法,不需要在方法名后添加一对“()”

其他知识点

  1. 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+YXY
  2. WinEdt 中 Tex 编译的快捷键为 ctrl+shift+P,当出现报错信息时 l.30 中字母 l 后面的即出错的行数,输入 e 可以定位到对应的行,输入 Enter 查看下一个错误信息,输入 s 忽略所有报错信息。
  3. 变形场(deformation field)是指能使流体在运动中发生形状变化,尤其是伸展(收缩)和切变的速度场。
  4. nvidia-smi 命令查看显卡使用情况
  5. ubuntu查看版本信息:lsb_release -a,查看 CUDA 版本 nvcc --versioncat /usr/local/cuda/version.txt
  6. linux 编辑环境变量 vi ~/.bashrc,使环境变量生效 source ~/.bashrc,查看环境变量中的 PATH 等 echo $PATH
  7. 远程连接服务器离线跑代码:首先用 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退出。

猜你喜欢

转载自blog.csdn.net/zuzhiang/article/details/104930142