python模块/包调用总结(包含跨目录)
我们在开发项目时,在使用pycharm继承好的环境下,直接点击按钮运行代码,一般不会遇到自己的包找不到的错误。但是当我们在使用命令行运行python代码,在项目的根路径下运行python xxx可能会报错找不到某个模块。ModuleNotFoundError: No module named 'xxxx'
前言在介绍这类问题前,不知道你们有没有好奇过。我们平时在python中使用下面的代码调用包时,python是如何找到这些包的? 把这个问题弄清楚,这类问题解决起来就很明白了。
12import os,sysimport xxx
python是通过模块搜索找到这些包的
python模块搜索路径当一个名为xxx的模块被导入的时候,解释器会在下面的路径里搜索:
内置模块
包含输入脚本的目录(或者未指定文件时的当前目录)
PYTHONPATH(一个包含目录列表,它和shell变量有一样的语法)
pip安装的第三方库
……上面所有的搜索路径会初始化在sys.path中。
与自定义包找不到的关系了解了python模块搜索的过程,我们再解决自己的包找不到的问题,思路就很 ...
.gitignore配置文件
.gitignore文件我们在使用git管理项目的时候,有些文件是不希望纳入git管理,或者不希望上传到github,比如数据集、开发工具的配置文件、日志文件、临时文件等等。
这时我们可以通过创建.gitignore文件,列出要忽略的文件模式,Git会根据这些模式规则来判断是否将文件添加到版本控制中。
格式规范
所有空行或者以注释符号 # 开头的行都会被 Git 忽略
可以使用标准的 glob 模式匹配
匹配模式最后跟斜杠(/)说明要忽略的是目录
要忽略指定模式以外的文件或目录,可以在模式前加上感叹号(!)进行取反
glob模式所谓的 glob 模式是指 shell 所使用的简化了的正则表达式,匹配规则如下:
"*":星号匹配零个或多个任意字符
[]:匹配任何一个列在方括号中的字符,如[ab]匹配a或者匹配b
"?":问号匹配一个任意字符
[n-m]:匹配所有在这两个字符范围内的字符,如[0-9]表示匹配所有0到9的数字
匹配示例
logs/:忽略当前路径下的logs目录,包含logs下的所有子目录和文件
/logs.txt:忽略根目录 ...
numpy将bool值转换成数值
在实际开发中我们需要将bool值转换成0/1或者其他数值,这里整理了两种方法。
使用np.array().astype(int)12a = np.array([False,True,False])int_a = a.astype(int)
使用np.where()12a = np.array([False,True,False])a = np.where(a,1,-1) # 得到 a [-1,1,1]
解释一下np.where函数:常见的两种用法:
第一种123a = np.array([1,2,3,4,5,6])b = np.where(a > 3) # 返回一个和a大小相同的array,满足条件的位置赋值True,不满足的赋值False# b = [False,False,False,True,True,True]
第二种123a = np.array([1,2,3,4,5,6])b = np.where(a>3,1,-1) # 三个参数,第一个是同上面一样的判 ...
numpy中一维数组和二维数组间的升降维度
在实际开发中,我们常常需要实现一维和二维数组间的升降维度操作
升降维度维度上升使用reshape或者resize
1234import numpy as npx = np.arange(20)result = x.reshape((4,5)) # 将数组变成4行5列,原数组不会被覆盖x.resize((4,5)) # 原数组被覆盖
维度降低使用reshape
123456arr = np.arange(10)arr.resize((2,5))arr.swapaxes((1,0)) # 交换维度,这里相当于转置np.transpose(arr,(1,0)) # 和上面结果一样arr.flatten("C") # 以行为主读取并写入,得到 [0,1,2,……]arr.flatten("F") # 以列为主读取并写入,得到[0,5,1,6,……]
np.reshape详解**numpy.reshape(a, ...
python/numpy 同时打乱两个(多个) 列表
在实际开发中,我们需要以相同的方法,同时打乱多个list,这里整理了几个常用的方法:
1. 使用zip1234import randomc = list(zip(a,b)) # 将a,b整体作为一个zip,每个元素一一对应后打乱random.shuffle(c) # 打乱ca[:],b[:] = zip(*c) # 将打乱的c解开
2. numpy中的permutation函数123456a = np.asarray([1,2,3,4,5,6)b = np.asarray([6,5,4,3,2,1])permutation = np.random.permutation(a.shape[0]) # 利用np.random.permutaion函数,获得打乱后的行数,输出permutationa = a[permutaion] # 得到打乱后数据ab = b[permutation] ...
pip命令行安装的包在pycharm中看不到
今天在命令行中使用pip install pukseg,但是在pycharm中并没有看到对应的包。后来发现出现这种情况是因为命令行中的pip版本和python版本不对应
环境情况电脑中有多个python版本,即有自己安装的python3.6.8,也有安装的anaconda.
python3.6.8路径:D:\Python\Python36\python.exe
Anaconda中python路径:D:\anaconda3\python.exe
问题描述在pycharm和terminal中设置了python的版本为 python3.6.8,如下图:然后在命令行(pycharm或者电脑自带的)使用pip install xxx,提示安装成功,但是在上图中找不到。
解决方法有两种解决方法
在命令行中指定python对应的pip安装包,操作如下
先用pip -V查看,发现pip确实不是对应的版本
使用D:\Python\Python36\python.exe -m pip install xxx安装包,然后就成功
直接在pycharm中安装,按照如下操作
自此,完美解决
Medical Cross-Modality Domain Adaptation (Med-CMDA)阅读笔记
介绍该论文解决的问题:
首先提出MR-->CT的domain adaptation解决方法
提出一个即插即用(plug-and-play)的网络结构,便于实验探究
论文主要内容网络结构从图中可以看出来:
蓝色部分(Seg-Net):是一个简单的医学分割网络,使用6个残差块和1个空洞残差块组成。整个网络使用30个卷积层和1个x8的上采样层组成。
绿色部分(DCM):是一个判别器,用于无监督迁移学习的训练
橘色部分(DAM):蓝色对应部分截取出来的一部分,用于训练后对source domain和target domain的特征进行提取。
注意:橘色部分是蓝色部分对应部分训练后直接复制得到的*
训练过程在描述训练过程之前先把Seg-Net根据Domain Router分为前后两个部分,分别是M和H。这里的Domain Router只是一个分割线,不是网络训练过程:
先使用source data训练分割网络Seg-Net
将训练好的Seg-Net分割为M和H两个部分
固定H部分,将H多个层得到的特征图cat后送到判别器DCM中
将source data和target ...
Anaconda介绍、安装以及使用教程
Anaconda 简单介绍相信大家平时都遇到过这种情况:从网上下载python项目的环境各不相同,有python2.7,python3.6等等,自己在电脑上下载各种不同版本的python,自己每次更改维护每个python环境很费事。这时候就需要用到Anaconda了。Anaconda就是可以便捷获取包且对包能够进行管理,同时对环境可以统一管理的发行版本。同时对环境可以统一管理的发行版本。
安装windows平台安装去官网下载后,双击就可以安装了
ubuntu平台安装去官网下载后,执行下面的指令安装:bash Anaconda3-5.0.1-Linux-x86_64.sh安装过程若是提示”Do you wish the installer to prepend the Anaconda<2 or 3> install location to PATH in your /home//.bashrc ?”(”你希望安装器添加Anaconda安装路径在/home//.bashrc文件中吗?”),建议输入”yes”如果没有添加成功,将下面的语句添加到~/.bashrc中:
1expo ...
SimpleITK读取医学文件
SimpleITK基本概念SimpleITK是ITK的简化接口,有多种语言接口,python版本安装pip install SimpleITK,其官文文档为:SimpleITK文档
使用SimpleITK读取文件医学图像中常用的格式有.dcm,.nrrd,.nii,.mhd,这几种格式的读取方式都是一样的。在这里主要介绍读取.dcm格式的文件。SimpleITK读取.dcm文件有两种方式:
传入文件夹路径,SimpleITK自动读取文件夹中所有.dcm文件,返回一个slice数组
传入每个slice的路径,自己分别加载后再合并。
读取文件夹中所有DICOM序列
对于这种方法,即便dicom文件不是按照z轴顺序存储的,也可以得到自动按照z轴排序的文件
第一种方法和第二种方法得到的切片顺序是相反的第一种方法1234567import SimpleITK as sitkimport numpy as npreader = sitk.ImageSeriesReader()dicom_names = reader.GetGDCMSeriesFileNames(path)reader.Se ...
pytorch使用float16减少精度运行
提高运算速度,减少GPU占用内存的方法有很多,其中减少精度的方法对大多数实验结果都没有太大影响。在这里使用Apex比使用pytorch的half靠谱多了.
ApexApex具体的介绍可以看这篇文章:基于Apex的混合精度加速
安装如果直接使用pip install apex安装,可能在运行的时候得到下面的错误:
1TypeError: Class advice impossible in Python3. Use the @Implementer class decorator instead
这时候你需要使用下面的方式安装:
1234pip uninstall apexgit clone https://www.github.com/nvidia/apexcd apexpython setup.py install
使用方法使用方法只有简单的三行代码:
123456from apex import ampmodel, optimizer = amp.initialize(model, optimizer, opt_level="O1") # 这里是“欧一” ...