• python使用记录


      1 #2017-7-17
      2 1、用len()函数可以获得list元素的个数;
      3     len()可以获取字符串长度
      4     
      5 2、 list正向0开始索引,,逆向-1开始索引;
      6     也可以把元素插入到指定的位置,比如索引号为1的位置:
      7     list.insert(索引,元素)
      8     要删除list末尾的元素,用pop()方法:
      9     list.pop()
     10     要删除指定位置的元素,用pop(i)方法,其中i是索引位置
     11     要把某个元素替换成别的元素,可以直接赋值给对应的索引位置:
     12     list[i] = ***
     13 
     14 3、  只有1个元素的tuple定义时必须加一个逗号(1,)来消除歧义
     15 
     16 4、if 判别式 :(注意别少了“:”)
     17     else/elif
     18     
     19 5、name = input()返回的数据类型是str! 
     20 6、for x in ...循环就是把 序列中 每个元素代入变量x,然后执行缩进块的语句;Python提供一个range()函数,可以生成一个整数序列;
     21 
     22 7、dict在内部就可以直接计算出Michael对应的存放成绩的“页码”,也就是95这个数字存放的内存地址,直接取出来,所以速度非常快;避免key不存在的错误,有两种办法,一是通过in判断key是否存在;dict提供的get方法,如果key不存在,可以返回None,或者自己指定的value;删除一个key,用dict.pop(key)方法,对应的value也会从dict中删除
     23 
     24 8、创建一个set,需要提供一个list不可以放入可变对象,因为无法判断两个可变对象是否相等
     25     s = set([1, 1, 2, 2, 3, 3])
     26     s = {1, 2, 3}
     27     add(key)方法可以添加元素到set中,可以重复添加,但不会有效果
     28     s.add(4)
     29     s.remove(4)
     30     set可以看成数学意义上的无序和无重复元素的集合,因此,两个set可以做数学意义上的交集、并集等操作,返回交,并集(合)set()表示空集,只能用len()去判断。
     31     
     32 9、None是一个特殊的常量;None和任何其他的数据类型比较永远返回False;你可以将None复制给任何变量
     33 
     34 10、定义一个函数要使用def语句,依次写出函数名、括号、括号中的参数和冒号;
     35     没有return语句,函数执行完毕后也会返回结果,只是结果为None
     36     调用的时候,既可以按顺序提供默认参数,比如调用enroll('Bob', 'M', 7),意思是,除了name,gender这两个参数外,最后1个参数应用在参数age上,city参数由于没有提供,仍然使用默认值。
     37 
     38     也可以不按顺序提供部分默认参数。当不按顺序提供部分默认参数时,需要把参数名写上(非默认参数也可以)。
     39     
     40     定义默认参数要牢记一点:默认参数必须指向不变对象或只有变量名!
     41     
     42     定义参数 数目可变的函数:function(*number)参数前面加了一个*号。在函数内部,参数numbers接收到的是一个tuple;Python允许你在list或tuple前面加一个*号,把list或tuple的元素变成可变参数传进去;
     43     
     44 11、递归:
     45 ===> fact(5)
     46 ===> 5 * fact(4)
     47 ===> 5 * (4 * fact(3))
     48 ===> 5 * (4 * (3 * fact(2)))
     49 ===> 5 * (4 * (3 * (2 * fact(1))))
     50 ===> 5 * (4 * (3 * (2 * 1)))
     51 ===> 5 * (4 * (3 * 2))
     52 ===> 5 * (4 * 6)
     53 ===> 5 * 24
     54 ===> 120
     55 
     56 在计算机中,函数调用是通过栈(stack)这种数据结构实现的,每当进入一个函数调用,栈就会加一层栈帧,每当函数返回,栈就会减一层栈帧。由于栈的大小不是无限的,所以,递归调用的次数过多,会导致栈溢出。
     57 
     58 12、递归(Iteration)
     59     如果给定一个list或tuple,我们可以通过for循环来遍历这个list或tuple,这种遍历我们称为迭代(Iteration)
     60     很多其他数据类型是没有下标的,但是,只要是可迭代对象,无论有无下标,都可以迭代
     61     因为dict的存储不是按照list的方式顺序排列,所以,迭代出的结果顺序很可能不一样;
     62     默认情况下,for key in d,dict迭代的是key。
     63     如果要迭代value,可以用for value in d.values()(应该是字典的一种函数),
     64     如果要同时迭代key和value,可以用for k, v in d.items()。
     65 
     66     Python内置的enumerate函数可以把一个list变成索引-元素对,这样就可以在for循环中同时迭代索引和元素本身:
     67     for i, value in enumerate(['A', 'B', 'C']):
     68     ...     print(i, value)
     69 
     70     for循环里,同时引用了两个变量:
     71      for x, y in [(1, 1), (2, 4), (3, 9)]:
     72     ...     print(x, y)
     73 
     74 13、方法与函数
     75     方法和对象相关;
     76     函数和对象无关。
     77     Java中只有方法,C中只有函数,而C++里取决于是否在类中。
     78 
     79 14、循环列表生成:[元素形式,内部“简单 单支 判断语句”]
     80     L1 = ['Hello', 'World', 18, 'Apple', None]
     81     l2 = [s.lower() for s in L1 if isinstance(s,str)]
     82     print(l2)
     83 
     84 15、生成器:generator
     85     在循环的过程中不断推算出后续的元素,这样就不必创建完整的list,从而节省大量的空间。
     86     把一个列表生成式的[]改成(), g = (x * x for x in range(10))
     87     就创建了一个generator
     88     通过next(g)函数获得generator的下一个返回值
     89     next(g)
     90     0
     91     ...也可通过for循环输出(则不需要nex语句)
     92     
     93 16、可迭代的“函数” yield
     94     函数定义中包含yield语句,那么这个函数就不再是一个普通函数,而是一个generator函数
     95     generator和函数的执行流程不一样。
     96     函数是顺序执行,遇到return语句或者最后一行函数语句就返回。
     97     generator的函数,在每次调用next()的时候执行,遇到yield语句返回(返回yield后的值),再next()时,继续从上次返回的yield语句处继续执行(也就是函数执行只是中断了一下,可以返回继续执行)
     98     
     99 ###*********************************我是分割线**************************************************************    
    100 #2017-07-18 15:15:42
    101 
    102 1、 一类是集合数据类型,如list、tuple、dict、set、str等, 这些可以直接作用于for循环的对象统称为可迭代对象:Iterable
    103     一类是generator,生成的迭代对象:可以被next()函数调用,并不断返回下一个值的对象称为迭代器:Iterator
    104     Iter()可以将list ,tuple,dict..转换成可迭代对象
    105     
    106 2、函数式编程就是,将函数作为参数传参!
    107 
    108 3、map()函数接收两个参数,一个是函数,一个是Iterable,map将传入的函数依次作用到序列的每个元素,并把结果作为新的        
    109     Iterator返回。 r = map(f函数, [1, 2, 3, 4, 5, 6, 7, 8, 9]),结果r是一个Iterator
    110     Iterator是一种惰性序列:仅在需要的时候才会去调用它的body
    111     通过list()函数让它把整个序列都计算出来并返回一个list。list(r)
    112 
    113 4、reduce把一个函数作用在一个序列[x1, x2, x3, ...]上,这个函数必须接收两个参数,reduce把结果继续和序列的下一个元素做累积计算,其效果就是:
    114 reduce(f, [x1, x2, x3, x4]) = f(f(f(x1, x2), x3), x4)
    115 
    116 5、 def char2num(s):
    117         return {'0': 0, '1': 1, '2': 2, '3': 3, '4': 4, '5': 5, '6': 6, '7': 7, '8': 8, '9': 9}[s]
    118     {}是一个字典L,L[key]取字典中的value
    119     
    120 6、s=''.join(s);s=['s','b','c']zifu列表连接成字符串
    121    函数中还可以定义函数
    122    
    123 7、filter()把传入的函数依次作用于每个元素,然后根据返回值是True还是False决定保留还是丢弃该元素。
    124     list(filter(is_odd, [1, 2, 4, 5, 6, 9, 10, 15]))
    125     filter()这个高阶函数,注意到filter()函数返回的是一个Iterator,也就是一个惰性序列
    126 
    127 8、常数并不能直接转乘Iterable,可以先转str,
    128 
    129 9、key指定的函数将作用于list的每一个元素上,并根据key函数返回的结果进行排序(也就是按照key转换后的值与默认“从小到大”的顺序,对list排序,这里好像没有True or Flase的问题,函数完成的只是转换,有默认的顺序)
    130 
    131 10、sorted()函数也是一个高阶函数,它还可以接收一个key函数来实现自定义的排序(key估计是其默认参数,所以更改是要写出变量名。)sorted([36, 5, -12, 9, -21], key=abs)
    132 
    133 11134 
    135 10、正则表达式,         
    136     (1)、[]匹配字符集,使用其中一个字符
    137     (2)、s=r"^**",匹配行首;(其在[]中,'除了')
    138             s=r"**$",匹配行尾;(其在[]中,'无意')
    139             
    140     (3)>>> s(当使用''''''输入字符串时,实际存储是下面)
    141 '
    hello
    slie
    seif
    ejf
    aef
    ef
    e
    f
    
    ge
    ge
    g
    
    '
    142         这种情况下,行首匹配只能管第一行,可用多行匹配参数fimtall(*,*,re.M)
    143     (4144         d    匹配任意十进制数,相当于 [0-9]
    145         D    匹配任意非数字字符,相当于 [^0-9]
    146         s    匹配任意空白字符,相当于 [ 	
    
    fv]
    147         S    匹配任意非空白字符,相当于 [^ 	
    
    fv]
    148         w    匹配任意数字和字母,相当于 [a-zA-Z0-9_]
    149         W    匹配任意非数字和字母的字符,相当于 [^a-zA-Z0-9_]
    150         +    匹配前一个字符或子表达式一次或多次
    151         *    匹配前面的字符或者子表达式0次或多次   
    152         {n}    匹配前一个字符或子表达式n次
    153         {m,n}    匹配前一个字符或子表达式至少m次至多n次
    154         ?    匹配前一个字符或子表达式0次或1次重复
    155         
    156     (5)编译后还是要使用re调用方法,re.
    157         pattern1 = re.compile(p1)#同样是编译
    158         matcher1 = re.search(pattern1,key)#同样是查询
    159         
    160      (6)方法:
    161      findall()找到 RE匹配的所有子串,并把它们作为一个列表返回 
    162                 import re;
    163                 s=r"";
    164                 re.findall(s,"")
    165      (7)分组:
    166         用 ()  表示的就是要提取的分组(Group),
    167         如果正则表达式中定义了组,就可以在Match对象上用group()方法提取出子串来
    168         group(0)永远是原始字符串,group(1)、group(2)……表示第1、2、……个子串
    169         >>> m = re.match(r'^(d{3})-(d{3,8})$', '010-12345')
    170         >>> m.group(0)
    171         '010-12345'
    172         >>> m.group(1)
    173         '010'
    174         >>> m.group(2)
    175         '12345'
    176         
    177         
    178 11、返回函数,感觉挺难,应该是没有接触过的原因
    179 
    180 12、关键字lambda表示匿名函数,因为函数没有名字,不必担心函数名冲突,
    181 map(lambda x: x * x, [1, 2, 3, 4, 5, 6, 7, 8, 9])冒号前面的x表示函数参数。
    182 匿名函数有个限制,就是只能有一个表达式,不用写return,返回值就是该表达式的结果。
    183 
    184 13、函数对象有一个__name__属性,可以拿到函数的名字:
    185  def now():
    186     print('2015-3-25')
    187 
    188  now.__name__
    189  
    190 14、装饰器,也是一个没有接触过的东西
    191 
    192 #2017-07-19 13:31:48
    193 1、 模块就是一个.py文件,引入文件,就要具体到.py文件,包名指向__init__.py文件,只引入包名,mean引入包中的__init__.py
    194     使用模块还可以避免函数名和变量名冲突,尽量不要与内置函数名字冲突.
    195     为了避免模块名冲突,Python又引入了按目录来组织模块的方法,称为包(Package)。
    196     每一个包目录下面都会有一个__init__.py的文件,否则,Python就把这个目录当成普通目录,而不是一个包
    197     __init__.py可以是空文件,也可以有Python代码,因为__init__.py本身就是一个模块,而它的模块名就是mycompany。
    198     自己创建模块时要注意命名,不能和Python自带的模块名称冲突。
    199 
    200 2、Python模块的标准文件模板(编写一个hello的模块:):
    201 
    202     任何模块代码的第一个字符串都被视为模块的文档注释
    203     使用__author__变量把作者写进去
    204     导入sys模块后,就有了变量sys指向该模块,利用sys,就可以访问sys模块的所有功能
    205     sys模块argv变量,用list存储了命令行的所有参数,第一个参数是该.py文件的名称
    206     运行python3 hello.py获得的sys.argv就是['hello.py']
    207     这种__name__,只有运行主文件是本文件时才执行,最常见的就是运行测试
    208     
    209     
    210 #!/usr/bin/env python3
    211 # -*- coding: utf-8 -*-
    212 
    213 ' a test module '  
    214 
    215 __author__ = 'Michael Liao' 
    216 
    217 import sys 
    218 
    219 def test():
    220 
    221     args = sys.argv
    222     if len(args)==1:
    223         print('Hello, world!')
    224     elif len(args)==2:
    225         print('Hello, %s!' % args[1])
    226     else:
    227         print('Too many arguments!')
    228 
    229 
    230 if __name__=='__main__':
    231     test()
    232     
    233 3、 正常的函数和变量名是公开的(public),可以被直接引用,比如:abc,x123,PI等
    234     __xxx__这样的变量是特殊变量,可以被直接引用,但是有特殊用途
    235     _xxx和__xxx这样的函数或变量就是非公开的(private),不应该被直接引用,比如_abc,__abc等
    236     
    237 4、当我们试图加载一个模块时,Python会在指定的路径下搜索对应的.py文件,如果找不到,就会报错:
    238     默认情况下,Python解释器会搜索当前目录、所有已安装的内置模块和第三方模块,搜索路径存放在sys模块的path变量中
    239     sys.path
    240 ['', '/Library/Frameworks/Python.framework/Versions/3.4/lib/python34.zip', '/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4', '/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/plat-darwin', '/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/lib-dynload', '/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/site-packages']
    241 
    242 5、面向对象思想:
    243     
    244     5.1假设我们要处理学生的成绩表,为了表示一个学生的成绩,面向过程的程序可以用一个dict表示:
    245 
    246     std1 = { 'name': 'Michael', 'score': 98 }
    247     std2 = { 'name': 'Bob', 'score': 81 }
    248     而处理学生成绩可以通过函数实现,比如打印学生的成绩:
    249 
    250     def print_score(std):
    251         print('%s: %s' % (std['name'], std['score']))
    252     
    253     
    254     5.2如果采用面向对象的程序设计思想,我们首选思考的不是程序的执行流程,而是Student这种数据类型应该被视为一个对象,这个对象拥有name和score这两个属性(Property)。如果要打印一个学生的成绩,首先必须创建出这个学生对应的对象,然后,给对象发一个print_score消息,让对象自己把自己的数据打印出来。
    255 
    256     class Student(object):
    257 
    258         def __init__(self, name, score):
    259             self.name = name
    260             self.score = score
    261 
    262         def print_score(self):
    263             print('%s: %s' % (self.name, self.score))
    264             
    265             
    266 6、目前不准备设计python类思想的编程!c++还没搞熟,,,,,,
    267     andor、not是python提供的逻辑操作符
    268     只要不为0的值都会转化为bool类型,所以abc直接与bool比较,没法比较,但是if 'abc' ==> if bool('abc')
    269     if(条件)
    270     print('abc == True','abc' == True)
    271     if 'abc':
    272         print('abc == True')
    273         
    274 7、即使文件已经关闭,但f还是拥有这个文件的句柄,所以转换为bool类型为 True    
    275     f=open("Iter.py")
    276 
    277     f.close() 
    278     if f:
    279         print(True)
    280     else:
    281         print(False)
    282 
    283 8、默认都是读取文本文件,并且是UTF-8编码的文本文件(应该是按照UTF-8读取,但是内部按照UNICODEING存储)
    284     要读取二进制文件,用'rb'模式打开文件
    285     写文件和读文件是一样的,传入标识符'w'或者'wb'表示写文本文件或写二进制文件:
    286     当我们写文件时,是放到内存缓存起来,只有调用close()方法时,操作系统才保证把没有写入的数据全部写入磁盘
    287     
    288     
    289 9、操作文件和目录的函数一部分放在os模块中,一部分放在os.path模块中
    290     # 查看当前目录的绝对路径:
    291     os.path.abspath('.')
    292 
    293     创建,不要直接拼字符串,而要通过os.path.join()函数,这样可以正确处理不同操作系统的路径分隔符:
    294     os.path.join('/Users/michael', 'testdir')
    295     '/Users/michael/testdir'
    296 
    297     拆分路径时,也不要直接去拆字符串,而要通过os.path.split()函数,这样可以把一个路径拆分为两部分,后一部分总是最后级别的目录或文件名:
    298     >>> os.path.split('/Users/michael/testdir/file.txt')
    299     ('/Users/michael/testdir', 'file.txt')
    300 
    301     可以直接让你得到文件扩展名,很多时候非常方便:
    302     >>> os.path.splitext('/path/to/file.txt')
    303     ('/path/to/file', '.txt')
    304     
    305     这些合并、拆分路径的函数并不要求目录和文件要真实存在,它们只对字符串进行操作
    306     
    307 10、把'变量'变成可存储或传输的过程称之为序列化(不只是保存数据,还有结构,,,,)
    308     变量内容从序列化的对象重新读到内存里称之为反序列化
    309     
    310     pickle.dumps()方法把任意对象序列化成一个bytes,然后,就可以把这个bytes写入文件。或者用另一个方法pickle.dump()直接把对象序列化后写入一个file-like Object.
    311     当我们要把对象从磁盘读到内存时,可以先把内容读到一个bytes,然后用pickle.loads()方法反序列化出对象,也可以直接用pickle.load()方法从一个file-like Object中直接反序列化出对象。
    312     
    313 11、有关操作系统多线程,多进程编程也是没有接触过的东西
    314 
    315 **************************************************************************************************
    316 #2017-07-22 14:57:26
    317 1、class Student(object):
    318     pass
    319     class后面紧接着是类名,即Student,
    320     类名通常是大写开头的单词,
    321     紧接着是(object),表示该类是从哪个类继承下来的
    322     
    323 2、 自由地给一个实例变量绑定属性,类中并没有定义,但是实例化后却能添加属性!!!
    324     类数据属性:定义在类里面但在函数外面的变量,它们都是静态的。
    325     实例属性:__init__()方法里的变量就是实例属性,这些属性只有被创建时才会被创建
    326     可以在创建实例的时候,把一些我们认为必须绑定的属性强制填写进去
    327     初始化__init__方法的第一个参数永远是self,表示创建的实例本身,就可以把各种属性绑定到self
    328     
    329     class Student(object):
    330 
    331     def __init__(self, name, score):
    332         self.name = name
    333         self.score = score
    334      def print_score(self):
    335         print('%s: %s' % (self.name, self.score))
    336         
    337 3、 有了__init__方法,在创建实例就不能传入空的参数了,必须传入与__init__方法匹配的参数,但self不需要传
    338     Python解释器自己会传进去
    339     类中方定义方法,除了第一个参数是self外,其他和普通函数一样。
    340     要调用一个方法,实例变量上直接调用,除了self不用传递,其他参数正常传入bart.print_score()
    341     
    342 4、属性的名称前加上两个下划线__,在Python中,实例的变量名如果以__开头,就变成了一个私有变量(private)
    343   def __init__(self, name, score):
    344         self.__name = name
    345         self.__score = score
    346         
    347 5、Python “没有变量”,有“名字绑定”,一个名字为一个实例(instance)的引用,变量只是大家沿用了更熟悉的概念而已。
    348    `a = 20` 这句代码里,`a` 只是一个名字(引用),
    349    真正存在的是:各种类型‘值’,其内存不以变量名而转移,没有引用会消失!
    350 
    351 *********************************************************************************************************
    352 #2017-07-23 16:07:30
    353 
    354 1、鉴于python 中没有指针引用这类具体类型,想要使用这类功能的时候,对于当个变量来说似乎没有这种功能,因为没有像c、c++    中直接代表变量内存的东西,python有的全部是‘引用’,故对于列表,之类的数据,直接赋值列表名,相当于引用赋值
    355     
    356 2、除非对饮引用直接操作,才会更改引用指向的值,否则,通过引用获取地址之类的赋值操作不会更改引用的值
    357     a=1                                                    nums=[1,2,3]
    358     b=a                                                    a=nums
    359     b=4(直接修改引用)                                      a[0]=4(通过引用取地址,修改,对于变量a,nums这层的引用没变)
    360     a=1                                                    nums=[4,2,3]
    361 
    362 ***********************************************************************************************************
    363 #2017-07-24 15:24:58
    364 1、str()函数直接对数字列表转换,会将[] ,也当成字符串元素转换
    365 
    366 **********************************************************************************************************
    367 #2017-07-25 15:15:45
    368 1、python 全局变量,使用:global声明变量,在声明的区域内可以使用外部的全局变量
    369 name='lhf'
    370 def change_name():
    371     #global name
    372     name='帅了一比'
    373     print('change_name',name)
    374 change_name()
    375 print(name)
    376 
    377 
    378 2、递归中的“类似静态变量”2
    379 class Solution(object):
    380     def __init__(self, ways=0):
    381         self.ways = ways
    382     def climbStairs(self, n):    
    383         if n-1==0:
    384             self.ways=self.ways+1
    385         if n-2==0:
    386             self.ways=self.ways+1
    387         if n-1 > 0:
    388             self.climbStairs(n-1)
    389         if n-2 > 0:
    390             self.climbStairs(n-2)
    391         return self.ways
    392 **********************************************************************************************************
    393 #2017-07-28 15:49:31
    394 1、递归函数的编写:要搞清楚返回值的类型,以及怎么样使用返回值 
    395 2、递归真正有价值的是从返回处开始的,(从最后一层返回)
    396 3、子叶节点不是数,是其子叶为None的二叉树
    397 4、满足条件可终止的递归:    
    398     def layerroots(self):
    399         for i in self.roots:
    400            
    401         if self.last == None:
    402             self.layerroots()
    403             
    404             
    405             
    406 ***********************************************************************************************************
    407 #2017-08-25 21:10:29
    408 动态地改变Python搜索路径:(只能先设置路径,再导入包这一种操作吗),也许因为路径只能使用字符串处理的原因,import 不能含有字符串
    409 模块必须处于Python搜索路径中才能被导入,但你不想设置个永久性的大路径,因为那样可能会影响性能,所以,你希望能够动态地改变这个路径。
    410 sys.path是个列表,所以在末尾添加目录是很容易的,用sys.path.append就行了。当这个append执行完之后,新目录即时起效,以后的每次import操作都可能会检查这个目录。
    411 如同解决方案所示,可以选择用sys.path.insert(0,…,这样新添加的目录会优先于其他目录被import检查。
    412 
    413 **********************************************************************************************************
    414 在python 中对图像的通道操作
    415 http://www.voidcn.com/article/p-otstjfet-z.html
    416 
    417 *****************************************************************************************************
    418 #2017-10-24 22:49:22
    419 python cv2显示保存热点图
    420 cv2.applyColorMap(data,cv2.COLORMAP_HOT)
    421 
    422 ****************************************************************************************************
    423 利用增加纬度的方式单通道边三通道,每个元素扩展至三个数
    424 data4=np.dstack((data1,data2,data3))
    425 
    426 ****************************************************************************************************
    427 numpy中的数据类型转换,不能直接改原数据的dtype!  只能用函数astype()
    428 
    429 *************************************************************************************************
    430 #np多维矩阵存储方式
    431     #当其仅作为数据存储时,可继续按照数组形式理解,分页存储[页索引][行索引][行中,具体一个]
    432     #当其使用轴向函数时,立体理解好点,越往后的轴,所包含的“元素”越具体:0轴一个元素,一个面;1轴,一个元素,一行。。。
    433     #这都是最值的索引函数,取0轴索引最值,取1轴索引最值,取2轴索引最值,输出与其垂直的平面形状,
    434     print(np.argmax(a, axis=2))
    435     print(a.shape)
    436     
    437     
    438     
    439 ****************************************************************************************************
    440 #np.pad补边(输入矩阵,范围,方式,值):
    441 #范围每个()
    442 #描述一个维度有几个()意味着填补几个维度,此维度整体扩充,(前补几个,后补几个)
    443 #填补这么多(1275,1110,3)
    444 padded_I = np.pad(I, offset_3d, 'constant', constant_values=(0))
    445 
    446 
    447 *****************************************************************************************************
    448 np.transpose((2,0,1))
    449 #(2,0,1)是shape列表的索引,
    450 #例shape(10,10,3)>shape(3,10,10) 
    451 #按照上面转换,整体形状转变
    452 #元素也照此变化到新的位置,此时将索引视为一个列表,(2,0,1)就是其索引, a[0][1][2]->a[2][0][1]
    453 #最后的效果就是图片数据重构的感觉,
    454 #不会造成通道交换,因为整体变换,通道那一维的索引整体变化,相对不变
    455 
    456 #还有一个只交换行内元素的位置,a[...,[2,1,0]],用于图片通道交换,[2,1,0]同上
    457 
    458 
    459 ******************************************************************************************************
    460 #前者返回垂直轴面的最大值,后者返回最大值的索引
    461 ens_segscore = np.amax(ens_score, axis=2)
    462 ens_segmask = np.argmax(ens_score, axis=2)
  • 相关阅读:
    MySQL——事务,索引
    Python——多线程
    Python输入输出
    MySQL与Python的交互——增删改
    MySQL与Python的交互————查询
    Python的学习路
    MySQL数据库
    MySQL条件查询
    设计模式笔记 抽象工厂模式
    设计模式笔记 建造者模式
  • 原文地址:https://www.cnblogs.com/kanuore/p/8059047.html
Copyright © 2020-2023  润新知