python代码学习

python中的类class和实例instance

面向对象最重要的概念就是类(class)和实例(instance),类是抽象的模板,实例是根据类创建出来的一个个具体的“对象”。每一个对象都从类中集成有形同的方法,但各自的数据可能不同。

class Studentobject):
	pass
#表示Student类从object类继承下来的,其中Object类是所有类都会继承的类。

student = Student()
#定义好了类可以通过Student类创建出Student的实例,创建实例通过类名+()实现。

python内置方法

__init__方法

python内置的方法__init__方法,用于在创建实例的时候,把我们认为必须绑定的属性强制填写进去。

Class Studentobject):
	def __init__(self,name,score):
		self.name = name
		self.score = score
__init__方法的第一个参数永远是self,表示创建的类实例本身,self只想创建的实例本身
有了__init__方法,创建实例的时候就不可以不传参数了,必须传入与__init__方法匹配的参数,但self不用传参数。

类比java理解__init__:

  • init()方法相当于java中的构造函数,在创建一个类对象之后一定会调用的方法
    在python中,可以使用__init__方法()来传递参数,比如赋值给对象属性等。
    *如果想让内部属性不被外部访问,可以在属性名前加两个下划线。python中实例变量以下划线开头,就变成一个私有变量(private),只有内部可以访问,外部不能访问。
  • python中,变量名类似__xxx__的,也就是双下划线开头,且以双下划线结个尾的,是特殊变量,它可以直接发访问的,不是private变量,所以变量名不能起__xxx__这种类型。
class Student(object):
    def __init__(self, name, score):
        self.__name = name
        self.__score = score
    def print_score(self):
        print "%s: %s" %(self.__name,self.__score)
>>> student = Student('Hugh', 99)
>>> student.__name
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'Student' object has no attribute '__name'
  • 继承的时候,传入的(对于这个理解有点困难)
class Parent:
    def pprt(self):
        print(self)

class Child(Parent):
    def cprt(self):
        print(self)
c = Child()
c.cprt()
#输出:<__main__.Child object at 0x0000000002A47080>
c.pprt()
#输出:<__main__.Child object at 0x0000000002A47080>
#运行c.cprt等价于Child.cprt(c),self指的依然是Child类的实例。
p = Parent()
p.pprt()
#输出:<__main__.Parent object at 0x0000000002A47240>

介绍python类和实例

__call__方法

解释:
所有函数都是可调用对象。
一个类实例可以变成一个可调用对象,只需要实现一个特殊方法__call__()

案例:

class F:
    def __call__(self, *args, **kwargs):
        print('执行__call__')
说明:
s = F()
s()
先给类创建一个对象,直接通过对象来执行,就会自动去执行类中的__call__函数。

python

python,是一门动态语言,也就是可以给对象动态添加属性和方法。
python,属于脚本语言,不像编译型语言那样先将程序编译成二进制再运行,而是动态的逐行解释运行。
一个python源码文件(.py),不仅可以直接运行,还可以作为模块被其他文件调用。

self

*self:表示类的实例,而不是类。

*在python中,类的方法与普通函数的一个特别的区别是:
他们必须有一个额外的第一个参数名称,但是在调用这个方法的时候你不为这个参数赋值,python会提供这个值。这个特别的变量指对象本身,按照惯例它的名称是self。也就是说如果这个函数是类的方法,则第一个参数就是self。

numpy.argmax(axis=0/1)——返回最大值的索引;

参数axis=0/1,0在列中比较,选出最大的行索引,1在行中比较,选出最大的列索引。
二维数组中最后一位axis=1和axis=-1是一样的。
参考

array.shape——显示为(高,宽,通道数)

import numpy as np

Image.size——显示为(宽,高)

from PIL import Image

np.array(image)——将image转换成array或者np.asarray(image)

Image.fromarray()——实现array到image的转换

图像.resize(size,resample)——返回此图像的已调整大小的副本

size—以像素为单位的请求大小,二元组(宽度、高度)
resample—可选的重新采样过滤器
参考

str.splitlines([keepends])——按照行(‘\r’,‘\r\n’,‘\n’)分割,返回一个包含各行作为元素的列表。

参数keepends,表示输出是否保留换行符(‘\r’,‘\r\n’,‘\n’),默认是false,不包含换行符,如果为true,则保留换行符。

os.path.exists(path/文件)——判断括号内的文件是否存在的意思

os.path模块主要用于文件的属性获取。

os.makedirs(path,mode=)——用于递归创建目录。

参数:path需要递归创建的目录。
mode权限设置。

tqdm(可迭代对象)——实现可视化进度

参考

torch.type——表示torch.Tensor的数据类型的对象。

参考

__ name&zwnj __ == '&zwnj__main__'解释

if __name__ == '__main__':
#当.py文件被直接运行时,if __name__ == '__main__'则 该内容之后的代码块将被运行;
#当.py文件以模块形式被导入时,if __name__ == '__main__'之下的代码块不被运行。

np.zero(shape,dtype=float,order=‘C’)——创建0矩阵,返回给定形状和类型的新数组,用零填充。

参数:
shape:int或ints序列,如【2,(2,3)】,新数组的形状;
dtype:数组类型,可选numpy.int8,默认是numpy.float64;
order:{‘C’,‘F’},可选,是否在存储器中以C或Fortran(按行或列方式)连续存储多维数据。

os.path.join(path1[,path2[,…]]))——把目录和文件名合成一个路径

join(sequence)——用于将序列中的元素以指定的字符连接生成一个新的字符串。

sequence:要连接的元素序列。

range(start,stop[,step])——返回的是一个可迭代对象(类型是对象),而不是列表类型

解释:range(x)——range(0,x)
参考

x.flatten()——是把x降到一维,默认是按横的方向降

x是矩阵或者数组。
x.flatten(‘F’)——表示按列排序

str.format()——格式化字符串

基本语法是通过{}和:来替代以前的%
参考

numpy.bincount(x,weights=None,minlength=0)——统计非负整数值出现个次数。

每一个bin都是给出输入数组中每个数出现的次数。如果有加权的w值,输出是out[n]+=weight[i],而不是out[n]+=1
x:输入数组;weights:加权,和x的shape一致;minlength:输出矩阵bin数的最小值。
output:输出矩阵分bin的结果,数组。
参考

x.astype(type)——转换数组的数据类型。

type可选值:int32、float64、string_
参考

x.reshape(参数)——将数组中的数据重新划分。

参考

np.nanmean()——nan取值为0且取均值时忽略它。

NaN : Not a Number(NaN),代表一个“不是数字”的值,这个值不能直接进行计算,但它却是一个Number类型。
参考

round(number,digits)——进行number的四舍五入

number:要进行四舍五入的数;digits:要小数点后保留的位数。
参考

np.diag(array)——根据array类型的不同输出内容不同

array是一维数组,结果形成一个以一维数组为对角线元素的矩阵
array是二维数组,结果输出矩阵的对角线元素
参考

np.maximum(x,y,out=None)——传入两个x和y,对x、y诸位比较取最大值

x:一般是数组;y:是一个数
返回值:不固定。
参考

array.sum(axis)——对array的每一列/行/全部元素进行相加

axis=0:每一列元素进行相加
axis=1:每一行元素进行相加
无参数:对array的全部元素进行相加

pass

作用:空语句。保证格式完整。保证语义完整。

  1. 在函数中的作用:用pass语句来占位,当做一个标记。
  2. 在循环中的作用:为复合语句编写一个空的主体。

str.split(str=“”,num = string.count(str))

作用:通过指定分割符对字符串进行切片,返回分割后的字符串列表。
参数:
str——分隔符,默认为所有的空字符,包括空格、换行(\n)、制表符(\t)等;
num——分割次数;

os.rename(src,dst)

作用:用于命名文件或目录,从src到dst,如果dst是一个存在的目录,将抛出OSError
参数:
src:要修改的目录名
dst:修改后的目录名
参考

import argparse

argparse模块,用于处理命令行选项、参数和子命令解析器等相关内容。
此模块可以让人快速编写用户友好的命令行接口内容。
程序定义它需要的参数,然后 argparse 将弄清如何从 sys.argv 解析出那些参数。 argparse 模块还会自动生成帮助和使用手册,并在用户给程序传入无效参数时报出错误信息。

argparse的使用

提供了简单易用的参数配置方法,提供在命令行程序中进行使用。
argparse的三个主要步骤:
1.创建ArgumentParser()对象
2.调用add_argument()方法添加参数
3.使用parse_args()解析添加的参数

add_argument()方法

ArgumentParser.add_argument(name or flags...[, action][, nargs][, const][, default][, type][, choices][, required][, help][, metavar][, dest])
# name/flage:一个命名或者一个选项字符串的列表
# type :命令行参数应当被转换成的类型
# default:当参数未在命令行中出现时使用的值
# help:一个此选项作用的简单描述

argparse的主要步骤

import argparse

if __name__ == '__main__':
    # 第1步:创建ArgumentParser对象
    parser = argparse.ArgumentParser(
                          usage='这是一个测试usage.', 
                          description='这是一大段描述文本。',
                          add_help='这是帮忙')
    
    # 第2步:添加变量
    parser.add_argument('-nmap', type=str, help='扫描文件路径')
    parser.add_argument('-pocs', type=str, default='pocs.json', help='模板文件路径')
    parser.add_argument('-n', type=int, default=-1, help='行数')
    parser.add_argument('-o', type=str, default=-1, help='输出文件路径。')

    # 第3步:解析输入变量
    args = parser.parse_args()

    # 第4步:使用变量
    print(parser.prog)
    print(args.nmap)
    print(args.pocs)
    print(args.n)
    print(args.o)

参考

import glob

glob模块主要用来查找目录和文件。

glob.glob(pathname,*,recursive=False)

作用:返回匹配到的路径列表
参数:
pathname:要匹配的路径
recursive:如果是true就会递归的去匹配符合的文件路径,默认是False
pathname中可以使用通配符:*,?,[]
*代表0个或多个字符
?代表一个字符
[]匹配指定范围内的字符,如[0-9]匹配字符
备注:通过glob.glob匹配的路径,最后一个文件的分隔符是\。

dataroot = "./Train_NG"
print(dataroot)
name = []
for x in glob.glob(dataroot + '/*'):
    print(x)
#输出显示
#./Train_NG
#./Train_NG\kos01_Part5_label.bmp

参考

from os.path import isdir

可直接使用isdir(path)

作用:判断某一路径path是否为目录。

enumerate(enumerate) 函数

作用:用于将一个可遍历的数据对象(如列表、元组或字符串)组合为一个索引序列,同时列出数据和数据下标,一般用在 for 循环当中。
参数:
sequence : 一个序列、迭代器或其他支持迭代对象。
start :下标起始位置。
返回值:返回 enumerate(枚举) 对象。

>>>seasons = ['Spring', 'Summer', 'Fall', 'Winter']
>>>list(enumerate(seasons))
[(0, 'Spring'), (1, 'Summer'), (2, 'Fall'), (3, 'Winter')]
>>>list(enumerate(seasons, start=1)) # 小标从 1 开始
[(1, 'Spring'), (2, 'Summer'), (3, 'Fall'), (4, 'Winter')]

sys.stdout.write()

作用:打印进度条
参考

print()和sys.stdout.write()的区别

参考

python中的路径细节转意:

转意

文件名开头为n的,如果使用’/'分隔符会被转意。为了防止被转意,需要在字符串前面增加一个r。

分隔符

在windows系统中,路径层级的分隔符为’ \ ’
在Linux系统中,路径层级的分隔符为’ / ’
但是python 对分隔符做了兼容,让Linux风格路径在windows下可用,于是很多时候大家都会选Linux风格。

打开、读取文件

open(file,flags[,mode])

作用:用于打开一个文件,模式参数mode参数是可选的,默认为 0777。
参数:(file)要打开的文件;
返回值:一个文件对象,可迭代。
参考
注意:文件使用完毕之后必须关闭,因为文件对象会占用操作系统的资源,并且操作系统同一时间能打开的文件数量也是有限的。也就是文件.close()
每次都这么写实在太繁琐,所以,Python引入了with语句来自动帮我们调用close()方法:

with open('/path/to/file', 'r') as f:
    print(f.read())
读取文件

random.sample(seq,n)

作用:从序列seq中选择n个随机且独立的元素。
参考

tensor图像数据转化为opencv支持的图像数据

opencv支持的图像数据
image = cv2.imread("path")
print(image)
像素分布在[0,255]之间
print(image.shape)
输出内容是:高、宽、通道数
print(type(image))
<class 'numpy.ndarray>,支持的格式是numpy格式
print(image.dtype)
uint8,数据类型是uint8
tensoropencv
像素分布float32[0,255] uint8
图像数据类型Tensornumpy类型
size/shape通道/高/宽高/宽/通道数

python 读写、创建 文件

方法作用
os.remove()删除一个文件
os.mknod(文件名)创建空文件
os.listdir(path)返回指定路径下的文件和文件夹列表

参考

sklearn.metrics.confusion_matrix(y_true, y_pred, *, labels=None, sample_weight=None, normalize=None)

作用:计算混淆矩阵以及评估分类的准确性。
解释:定义混淆矩阵C(confusion matrix C),Cij表示样本本身在i分组内但是预测却在j分组的数量。
参数:
y_true:样本的真实分类结果(数组类的形状)
y_pred:样本预测分类的结果(数组类的形状)
labels:索引矩阵的标签列表(数组类的形状)
sample_weight:样本权重
返回值:ndarray的形状。

from sklearn.metrics import confusion_matrix
y_true = [2, 1, 0, 1, 2, 0]
y_pred = [2, 0, 0, 1, 2, 1]
C=confusion_matrix(y_true, y_pred)
print(C, end='\n\n')
y_true = ["cat", "ant", "cat", "cat", "ant", "bird"]
y_pred = ["ant", "ant", "cat", "cat", "ant", "cat"]
C2 = confusion_matrix(y_true, y_pred, labels=["ant", "bird", "cat"])
print(C2)

import numpy as np

numpy.ndarray.flatten(order = ‘C’)

作用:返回压缩为一维的数组的副本。只适用于numpy对象,即array或者mat,普通的list列表是不行的。
参数:
order(C——按行进行压缩;F——按列进行压缩)

from numpy import *
a = array([[1,2],[3,4],[5,6]])
print(a)
结果:
[[1 2]
 [3 4]
 [5 6]]
print(a.flatten('F'))
结果:
[1 3 5 2 4 6]
print(a.flatten('C'))
结果:
[1 2 3 4 5 6]

np.diag(v,k=0)

作用:以一维数组的形式返回方阵的对角线(或非对角线)元素,或将一维数组转换成方阵(非对角线元素为0).两种功能角色转变取决于输入的v。
参数:
v:如果v是2D数组,返回k位置的对角线。如果v是1D数组,返回一个v作为k位置对角线的2维数组。
k:(int optional):对角线的位置,大于零位于对角线上面,小于零则在下面。

>>> x = np.arange(9).reshape((3,3))
>>> x
array([[0, 1, 2],
       [3, 4, 5],
       [6, 7, 8]])  
            
>>> np.diag(x)
array([0, 4, 8])
>>> np.diag(x, k=1)
array([1, 5])
>>> np.diag(x, k=-1)
array([3, 7])

>>> np.diag(np.diag(x))
array([[0, 0, 0],
       [0, 4, 0],
       [0, 0, 8]])

array.sum()

Numpy Ndarray对象

介绍:Nadrray是N维数组对象,是一系列同类型数据的集合,以 0 下标为开始进行集合中元素的索引,是NumPy 最重要的一个特点之一。
注意点:
ndarray 对象是用于存放同类型元素的多维数组。
ndarray 中的每个元素在内存中都有相同存储大小的区域。
内部组成:

  • 一个指向数据(内存或内存映射文件中的一块数据)的指针。
  • 数据类型或 dtype,描述在数组中的固定大小值的格子。
  • 一个表示数组形状(shape)的元组,表示各维度大小的元组。
  • 一个跨度元组(stride),其中的整数指的是为了前进到当前维度下一个元素需要"跨过"的字节数。
    图解:
    在这里插入图片描述

参考

np.bincount(x,weights = None,minlength = 0)

作用:计数每个值在非负整数数组中的出现次数。
容器的数量(大小为1)比x中的最大值大1。解释:相当于x给出的是索引值,此函数用于统计索引值的出现的次数,因为索引范围是0-n则不同索引值组成的列表的长度就是n+1.
参数:
x:类似数组,一维,且是非负整数。
minlength:整型,可选,表示输出数组的最小的bins个数。

array.astype(类型)、array.dtype()

作用:
array.dtype()——判断数组内部数据类型;
array.astype(类型)——可以对数组数据类型进行转换;

import matplotlib.pyplot as plt

plt.plot()

#单条线:
plot([x], y, [fmt], data=None, **kwargs)
#多条线一起画
plot([x], y, [fmt], [x2], y2, [fmt2], ..., **kwargs)
[fmt] 是一个字符串来定义图的基本属性如:颜色(color),点型(marker),线型(linestyle),

plot
plt.legend()
图例,为了帮助我们展示每个数据对应的图像名称。
不带参数调用 legend 会自动获取图例句柄及相关标签
legend

exposure 模块

opencv PIL.Image 图片处理的区别

操作opencvPIL.Image
图片读取模式BGR模式RGB模式
读取图片cv2.imread,输出的内容是[[][][]],类型是ndarray类型Image.open只是保持了图像被读取的状态,输出内容是<PIL.JpegImagePlugin.JpegImageFile image mode=RGB size=352x320 at 0x1CFC9291B80> 类型是<class ‘PIL.JpegImagePlugin.JpegImageFile’>
图片存储cv2.imwrite保存图像Image.save针对于保存JPG/JPEG格式的图片的情况

plt.plot()函数

作用:绘制点和线,并对其样式进行控制。
参考

python读取/展示图片的方式

opencv方式
读取图片cv2.imread
展示图片cv2.imshow 采用BGR模式
matplotlib.pyplot方式
读取plt.imread
展示plt.imshow 采用RGB模式
PIL.Image方式
读取Image.open
展示图片.show 采用RGB模式

python中的class和def介绍

class IOU(torch.nn.Module):
    def __init__(self, size_average = True):
        super(IOU, self).__init__()
        self.size_average = size_average

    def forward(self, pred, target):

        return _iou(pred, target, self.size_average)

Class类
Class:是一个面向对象的类,用来描述具有相同的属性和方法的对象的集合,类可以起到模板的作用;
在创建实例的时候,可以将认为必要的属性写入方法__init__中。
使用的时候需要进行实例化;
self:表示创建实例本身,所以可以把各种属性绑定到self;
def
类class中的def被称为函数,模板中可以包含很多函数;
使用的时候不需要实例化;

re模块的sub函数

作用:
用于替换字符串中的匹配项
语法:
re.sub(pattern, repl, string, count=0, flags=0)

参数名介绍
pattern正则中的模式字符串
repl替换的字符串,也可为一个函数
string要被查找替换的原始字符串
count模式匹配后替换的最大次数,默认 0 表示替换所有的匹配
flags编译时用的匹配模式,数字形式

map(f,list)

作用:接收一个函数 f 和 一个list,并通过把函数f依次作用在list的每个元素上,得到一个迭代器并返回。
python2中返回的是一个list,python3中返回的是一个iterator。

    a = 1234
    lis = list(map(int, str(a)))
    print(lis) #输出:[1, 2, 3, 4] 每个元素都是int类型

list(object)

作用:将任何可迭代数据转换为列表类型,并返回转换后的列表。
当参数为空的时候,list函数可以创建一个空列表;
可以将range类型和map类型的可迭代序列转换为列表;

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值