Python拓展

1 Python补充

  • Python 2.x 与 Python 3.x 除法的关系。
    - Python 2.x 的 / 除法:整数相除,结果舍弃小数;浮点数相除,结果保留小数。
    - Python 3.x 的 / 除法:整数或浮点数相除,结果都保留小数。
    - Python 2.x 的 // 除法:除法结果进行floor()操作,即向下取整。
    - Python 3.x 的 // 除法:同上。
    所以,
    - Python 2.x 的 / 除法中整数相除的操作可以直接用Python 3.x 的 // 操作代替;
    - Python 2.x 的 / 除法中浮点数相除的操作可以直接用Python 3.x 的 / 操作代替;
    - Python 2.x 的 // 除法可以直接用Python 3.x 的 // 操作代替;
  • 在list变量之前加*
    用法:将列表分解为单独的元素作为函数形参。
  • 在dict变量之前加**
    用法:将字典分解为单独的元素作为函数形参。
  • zip()函数打包
    用法:将可迭代的对象作为参数,将对象中对应的元素打包成一个个元组,然后返回由这些元组组成的对象。
zip([iterable, ...])
  • 自动给数字补零
    有时候我们需要用一种定长的形式显示数字,如001,002,003,...这就需要根据最大长度来对数字进行补零,Python中实现方法如下:
n = '12'
s = n.zfill(3)

对于纯数字,我们也可以通过格式化的方式来补0

n = 12
s = '%03d' % n
  • npy文件——Numpy专用的二进制格式
    np.load()和np.save()是读写磁盘数组数据的两个重要函数。使用时,数组会以未压缩的原始二进制格式保存在扩展名为.npy的文件中。
  • npz文件——压缩文件
    使用np.savez()函数可以将多个数组保存到同一个文件中。
    np.savez()函数的第一个参数是文件名,其后的参数都是需要保存的数组。传递数组时可以使用关键字参数为数组命名,非关键字参数传递的数组会自动起名为arr_0、arr_1……
    np.savez()函数输出的是一个扩展名为.npz的压缩文件,它包含多个与保存的数组对应的npy文件(由save()函数保存),文件名对应数组名
    读取.npz文件时使用np.load()函数,返回的是一个类似于字典的对象,因此可以通过数组名作为关键字对多个数组进行访问

2 随机数模块

导入模块

import random
  • random.random() 用来随机生成一个0到1之间的浮点数,包括零。
In [2]: random.random()
Out[2]: 0.15790797219589303
  • randint(a, b) 用来生成[a,b]之间的随意整数,包括两个边界值。
In [13]: random.randint(1,6)
Out[13]: 1
  • random.uniform(a,b) 用来生成[a,b]之间的随意浮点数,包括两个边界值。
In [15]: random.uniform(1,6)
Out[15]: 5.497873150216069
  • choice(seq) 从一个非空序列选出随机一个元素。seq泛指list,tuple,字符串等
In [17]: List = [1,2,3,4,5,6]
In [18]: random.choice(List)
Out[18]: 1
  • randrange(start, stop[, step = 1]) 这个就是random和range函数的合二为一了。但注意,range用法有变。
In [28]: random.randrange(1,6)
Out[28]: 3
  • random.shuffle(x[,random]) 正如函数名所表示的意思,shuffle,洗牌,将一个列表中的元素打乱。
In [37]: List = [1,2,3,4,5,6]
In [38]: random.shuffle(List)
In [39]: print(List)
[2, 1, 6, 4, 5, 3]
  • random.sample(sequence,k) 从有序列表中选k个作为一个片段返回。
In [42]: List = [1,2,3,4,5,6]
In [43]: random.sample(List,3)
Out[43]: [4, 6, 3]
  • random.seed ( [x] ) 改变随机数生成器的种子seed。如果你不了解其原理,你不必特别去设定seed,Python会帮你选择seed。使用同一个种子,每次生成的随机数序列都是相同的。
In [49]: random.seed(10)
In [50]: print("Random number with seed 10: ", random.random())
Random number with seed 10:  0.5714025946899135

In [51]: random.seed(10)
In [52]: print("Random number with seed 10: ", random.random())
Random number with seed 10:  0.5714025946899135

In [53]: random.seed(10)
In [54]: print("Random number with seed 10: ", random.random())
Random number with seed 10:  0.5714025946899135

3 Open3D三维数据处理

可视化

  • draw_geometries()
  • draw_geometries()的等价形式。可以使用Visualizer类自定义显示。
def custom_draw_geometry(pcd):
    vis = o3d.visualization.Visualizer()
    vis.create_window()
    vis.add_geometry(pcd)
    vis.run()
    vis.destroy_window()

通过对Visualizer对象的ViewControl和RenderOption属性进行设置,可以自定义显示的效果。

  • draw_geometries()的非阻塞(block)形式
    执行run()函数会阻塞在当前窗口的循环中,并且响应用户操作重新进行渲染,直到关闭窗口。我们可以替换掉run函数,进而自行控制渲染的进程。
vis = Visualizer()
vis.create_window()
for i in range(iteration):
    vis.update_geometry(geometry)
    vis.poll_events()
    vis.update_renderer()

一些问题

  • 方法一:
my_lst = [MyClass()]*3

生成的列表成员全都指向一个对象;

  • 方法二:
my_lst = [MyClass() for i in range(3)]

生成的列表成员包含不同实例;

999

  • pandas
  • eval()
  • shutil

[X] 好用的工具库

tqdm进度条

用一个进度条显示当前循环的完成进度。只需将可迭代对象放在tqdm()的括号里即可。

from tqdm import tqdm
for x in tqdm(lst):
    ...

argparse命令行参数解析

import argparse
parser = argparse.ArgumentParser(description='')
parser.add_argument('--input', type=int, required=True, help='')
parser.add_argument(...)
...
args = parser.parse_args()
  • add_argument()常用参数
    • type 将命令行参数自动转换为指定类型。
    • required 是否为必需参数。
    • default 非必需参数的默认值。
    • nargs='*' 该参数可接受多个值,存为列表。

re正则

posted @ 2020-05-10 21:15  tofengz  阅读(313)  评论(0编辑  收藏  举报