复现PointNet++时,遇到的问题总结(PointNet++中的python语法)

it2026-03-30  8

1、使用GPU和CPU的方法。

y.cpu()使用CPU进行计算。

y.cuda(),使用GPU进行计算。

2、one-hot encode(独热编码)

独热码是一组数,其中只有一个值为1,其余都是0。同样的,一组数中只有一个0,而其余都为1则称为独冷码。

举例:

如四类物品,标签为1,2,3,4.

采用独热编码,一个标签对应一个编码:

1:[1,0,0,0]

2:[0,1,0,0]

3:[0,0,1,0]

4:[0,0,0,1]

为什么要用独热编码呢?

使用one-hot编码,将离散特征的取值扩展到了欧式空间,离散特征的某个取值就对应欧式空间的某个点。将离散特征通过one-hot编码映射到欧式空间,是因为,在回归,分类,聚类等机器学习算法中,特征之间距离的计算或相似度的计算是非常重要的,而我们常用的距离或相似度的计算都是在欧式空间的相似度计算,计算余弦相似性,基于的就是欧式空间。将离散型特征使用one-hot编码,会让特征之间的距离计算更加合理。

3、命令行参数解析器--argparse

argparse 是 Python 内置的一个用于命令项选项与参数解析的模块,通过这个我们可以获取在命令行输入的内容。

使用方法:

导入argparse:import argparse创建ArgumentParser()对象调用add_argument()方法添加参数使用parse_args()添加解析参数 import argparse parse = argparseArgumentParser('Model')#Model是自己定义的名字 parse.add_argument('--model',type=str,default='mymodel',help='model name[default:mymodel]') return parser.parse_args()

4、日志信息(转自:https://blog.csdn.net/pansaky/article/details/90710751)

#1、通过函数创建日志信息 import logging #创建日志函数 def log_string(str): logger.info(str) print(str)

普通日志的创建步骤:

定义logger定义handler创建formatter给handler添加formatter给logger添加handler import logger #创建logger logger = logging.getLogger('mylogger') logger.setLevel(logging.info) #创建一个handler,用于写入日志文件 file_handler = logging.FileHandler('test.log') file_handler.setLevel(logging.info) #在创建一个handler,用于输出到控制台 ch = logging.StreamHandler() ch.setLevel(logging.info) #定义handler的输出格式(formatter) formatter = logging.Formatter('%(asctime)s-%(name)s-%(levelname)s-%(message)s') #给handler添加formatter file_handler.setFormatter(formatter) ch.setFormatter(formatter) #给logger添加handler logger.addHandler(file_handler) logger.addHandler(ch)

之后可以正式开始写日志文件了。(logging模块参数的详细解释,请参考:https://blog.csdn.net/pansaky/article/details/90710751)

5、路径处理库pathlib(参考:https://blog.csdn.net/itanders/article/details/88754606)

Python3之后,自带的pathlib模块的Path对路径操作更加简单,可以取代os.path了。

from pathlib import Path #获取当前目录 current_path = Path.cwd() print(current_path) #输出:/Users/liuzihao/Documents/项目文件/测试文件 #获取home目录 home_path = Path.home() print('\n',home_path) #/Users/liuzihao #获取当前目录的父目录 print('\n',current_path.parent) # /Users/liuzihao/Documents/项目文件 #如果父目录很长,可以用遍历的方法获取所有父目录 for p in current_path.parents: print(p) #/Users/liuzihao/Documents/项目文件 #/Users/liuzihao/Documents #/Users/liuzihao #/Users #/

文件名操作:

name目录的最后一个部分suffix目录中最后一个部分的拓展名suffixes返回多个拓展名列表stem目录最后一个部分,没有后缀with_name(name)替换目录最后一个部分并返回一个新的路径 with_suffix(suffix)替换拓展名,返回新的路径,拓展名存在则不变 from pathlib import Path #name目录的最后一个部分 example_path = Path('/Users/liuzihao/Documents/项目文件/from_json_to_txt.py') print(example_path.name) #from_json_to_txt.py #suffix目录中最后一个部分的拓展名 example_path = Path('/Users/liuzihao/Documents/项目文件/from_json_to_txt.py') print(example_path.suffix) #.py #stem目录最后一个部分,没有后缀 example_path = Path('/Users/liuzihao/Documents/项目文件/from_json_to_txt.py') print(example_path.stem) #from_json_to_txt

创建和删除文件夹

from pathlib import Path example_path = Path('/Users/liuzihao/Documents/项目文件/测试文件/test1') example_path.mkdir(exist_ok=True)

判断文件是否存在:

is_dir() 是否是目录is_file() 是否是普通文件is_symlink() 是否是软链接is_socket() 是否是socket文件is_block_device() 是否是块设备is_char_device() 是否是字符设备is_absolute() 是否是绝对路径resolve() 返回一个新的路径,这个新路径就是当前Path对象的绝对路径,如果是软链接则直接被解析absolute() 也可以获取绝对路径,但是推荐resolve()exists() 该路径是否指向现有的目录或文件: from pathlib import Path example_path = Path('/Users/Anders/Documents/pic-2.jpg') # 判断对象是否存在 print(example_path.exists()) # 输出如下: # True # 判断对象是否是目录 print(example_path.is_dir()) # 输出如下: # False # 判断对象是否是文件 print(example_path.is_file()) # 输出如下: # True

 

6、strip()和split()的用法

#strip()的用法 str =' airphone 123421 5 ' print(str) #结果:' airphone 123421 5 ' str2 = str.strip()#只删除开头和结尾处的空格 print(str2) #结果:'airphone 123421 5'

split()的用法:

按某一个字符进行分割,如'.' >>> str = ('www.google.com') >>> print str www.google.com >>> str_split = str.split('.') >>> print str_split ['www', 'google', 'com'] 按某一个字符分割,且分割n次。如按‘.'分割1次 >>> str_split = str.split('.',1) >>> print str_split ['www', 'google.com'] split()函数后面还可以加正则表达式,例如: >>> str_split = str.split('.')[0] >>> print str_split www split分隔后是一个列表,[0]表示取其第一个元素; >>> str_split = str.split('.')[::-1] >>> print str_split ['com', 'google', 'www'] >>> str_split = str.split('.')[::] >>> print str_split ['www', 'google', 'com'] 按反序列排列,[::]按正序排列 >>> str = str + '.com.cn' >>> str 'www.google.com.com.cn' >>> str_split = str.split('.')[::-1] >>> print str_split ['cn', 'com', 'com', 'google', 'www'] >>> str_split = str.split('.')[:-1] >>> print str_split ['www', 'google', 'com', 'com']

 

最新回复(0)