“人造太阳”计划

Google c++编程规范------注释

旧城冷巷雨未停 提交于 2020-01-21 11:19:03
在我写一起学 c++( 二 ) 中说道注释的重要性,特意找了 Google c++ 编程规范给大家参考。希望能对大家有所帮助,并且在以后为大家继续更新相应的规范要求 注释虽然写起来很痛苦,但对保证代码可读性至为重要,下面的规则描述了应该注释什么、 注释在哪儿。当然也要记住,注释的确很重要,但最好的代码 本身就是文档( self- documenting ) ,类型和变量命名意义明确要比通过注释解释模糊的命名好得多。 注释是为别人(下一个需要理解你的代码的人)而写的,认真点吧,那下一个人可能就是 你 ! 1. 注释风格 ( Comment Style ) 使用 // 或 /* */ ,统一就好。 // 或 /* */ 都可以, // 只是用的更加广泛,在如何注释和注释风格上确保统一。 2. 文件注释 ( File Comments ) 在每一个文件开头加入版权公告,然后是文件内容描述。 法律公告和作者信息 : 每一文件包含以下项,依次是: 1) 版权( copyright statement ) :如 Copyright 2008 Google Inc. ; 2) 许可版本( license boilerplate ) :为项目选择合适的许可证版本,如 Apache 2.0 、 BSD 、 LGPL 、 GPL ; 3) 作者( author line ) :标识文件的原始作者。

ccf 201803-2

主宰稳场 提交于 2020-01-20 18:44:55
问题描述   数轴上有一条长度为L(L为偶数)的线段,左端点在原点,右端点在坐标L处。有n个不计体积的小球在线段上,开始时所有的小球都处在偶数坐标上,速度方向向右,速度大小为1单位长度每秒。   当小球到达线段的端点(左端点或右端点)的时候,会立即向相反的方向移动,速度大小仍然为原来大小。   当两个小球撞到一起的时候,两个小球会分别向与自己原来移动的方向相反的方向,以原来的速度大小继续移动。   现在,告诉你线段的长度L,小球数量n,以及n个小球的初始位置,请你计算t秒之后,各个小球的位置。 提示   因为所有小球的初始位置都为偶数,而且线段的长度为偶数,可以证明,不会有三个小球同时相撞,小球到达线段端点以及小球之间的碰撞时刻均为整数。   同时也可以证明两个小球发生碰撞的位置一定是整数(但不一定是偶数)。 输入格式   输入的第一行包含三个整数n, L, t,用空格分隔,分别表示小球的个数、线段长度和你需要计算t秒之后小球的位置。   第二行包含n个整数a1, a2, …, an,用空格分隔,表示初始时刻n个小球的位置。 输出格式   输出一行包含n个整数,用空格分隔,第i个整数代表初始时刻位于ai的小球,在t秒之后的位置。 题解:用vector数组存每个坐标被那些顶点占据,如果size为1则不冲突,否则冲突。(不要用二维数组,二维数组太慢辽~) #include <stdio

python魔法方法-自定义序列

北城以北 提交于 2020-01-19 21:06:29
  自定义序列的相关魔法方法允许我们自己创建的类拥有序列的特性,让其使用起来就像 python 的内置序列(dict,tuple,list,string等)。   如果要实现这个功能,就要遵循 python 的相关的协议。所谓的协议就是一些约定内容。例如,如果要将一个类要实现迭代,可以实现 __iter__() 或者 __getitem__()其中一个方法 。   下面是一下相关的魔法方法: __len__(self) 返回容器的长度。 可变和不可变容器 都要实现它,这是协议的一部分。 __getitem__(self, key) 定义当某一项被访问时,使用self[key]所产生的行为。这也是 可变容器和不可变容器 协议的一部分。如果键的类型错误将产生TypeError;如果key没有合适的值则产生KeyError。 __setitem__(self, key, value) 定义当一个条目被赋值时,使用self[key] = value所产生的行为。这也是 可变容器协议 的一部分。而且,在相应的情形下也会产生KeyError和TypeError。 __delitem__(self, key) 定义当某一项被删除时所产生的行为。(例如del self[key])。这是 可变容器 协议的一部分。当你使用一个无效的键时必须抛出适当的异常。 __iter__(self) 返回一个迭代器

生成器迭代器正则视频笔记

僤鯓⒐⒋嵵緔 提交于 2020-01-17 08:57:30
多任务文件夹: import os os.mkdir(old_name+"复件") 创建文件夹 os.listdir("dirname") 返回一个列表 multiprocessing 多进程 创建进程池: po = multiprocessing.Pool(5) for work in works: po.apply_async(函数地址,函数参数) multiprocessing.Queue() print("\r %.2f %% " % args, end="") \r 回到行首 %.2f 保留两位小数 %% 显示% end=""不换行 协程: 迭代器: 只能往前不会回退。 for in 元祖, 列表 , 字典 ,字符串 判断是不是可以迭代对象: collections import Iterable isinstance(Object, Iterable) print("xxxx",isinstance(classmate,Iterable)) 打印元祖 必须有__iter__(self): def 保证一个对象成为一个可迭代对象. 保证类里有__iter__(self): 方法 from collections import Iterable class Classmate(object): def __init__(self): self.name = list()

梯度下降求解逻辑回归

穿精又带淫゛_ 提交于 2020-01-16 04:39:29
Logistic Regression The data 我们将建立一个逻辑回归模型来预测一个学生是否被大学录取。假设你是一个大学系的管理员,你想根据两次考试的结果来决定每个申请人的录取机会。你有以前的申请人的历史数据,你可以用它作为逻辑回归的训练集。对于每一个培训例子,你有两个考试的申请人的分数和录取决定。为了做到这一点,我们将建立一个分类模型,根据考试成绩估计入学概率。 #三大件 import numpy as np import pandas as pd import matplotlib.pyplot as plt %matplotlib inline import os path = 'data' + os.sep + 'LogiReg_data.txt' pdData = pd.read_csv(path, header=None, names=['Exam 1', 'Exam 2', 'Admitted']) pdData.head() */ /*--> */ Exam 1 Exam 2 Admitted 0 34.623660 78.024693 0 1 30.286711 43.894998 0 2 35.847409 72.902198 0 3 60.182599 86.308552 1 4 79.032736 75.344376 1 pdData.shape

08.模型集成

半城伤御伤魂 提交于 2020-01-16 04:31:00
机器学习实战教程(十):提升分类器性能利器-AdaBoost 模型融合方法总结 机器学习模型优化之模型融合 xgboost lightgbm 文章目录 集成方法 1、Bagging 2、Boosting 3、Bagging、Boosting二者之间的区别 4、AdaBoost 1) 计算样本权重 2) 计算错误率 3) 计算弱学习算法权重 4) 更新样本权重 5) AdaBoost算法 5.实例 Bagging Adaboost 集成方法 将不同的分类器组合起来,而这种组合结果则被成为 集成方法 (ensemble method)或者 元算法 (meta-algorithm)。 集成方法主要包括 Bagging 和 Boosting 两种方法,Bagging和Boosting都是将已有的分类或回归算法通过一定方式组合起来,形成一个性能更加强大的分类器,更准确的说这是一种分类算法的组装方法,即将 弱分类器 组装成 强分类器 的方法。 1、Bagging 自举汇聚法 (bootstrap aggregating),也称为bagging方法。Bagging对训练数据采用自举采样(boostrap sampling),即有放回地采样数据,主要思想: 从原始样本集中抽取训练集( 每次都是从训练集中做有放回的随机采样 )。每轮从原始样本集中使用Bootstraping的方法抽取n个训练样本

STL set 使用小结

浪子不回头ぞ 提交于 2020-01-14 13:24:41
这是微软帮助文档中对集合(set)的解释: “描述了一个控制变长元素序列的对象(注:set中的key和value是Key类型的,而map中的key和value是一个pair结构中的两个分 量)的模板类, 每一个元素包含了一个排序键(sort key)和一个值(value)。对这个序列可以进行查找、插入、删除序列中的任意一个元素,而完成这些操作的时间同这个序列中元素个数的对数成比例关 系, 并且当游标指向一个已删除的元素时,删除操作无效。” 而一个经过更正的和更加实际的定义应该是:一个集合(set)是一个容器,它其中所包含的元素的值是唯一的。这在收集一个数据的具体值的时候是有用的。集 合中的元素按一定的顺序排列,并被作为集合中的实例。如果你需要一个键/值对(pair)来存储数据,map是一个更好的选择。一个集合通过一个链表来组 织,在插入操作和删除操作上比向量(vector)快,但查找或添加末尾的元素时会有些慢。 #include<iostream> #include<string> #include<set> using namespace std; int main() { set<string> strset; set<string>::iterator iter; strset.insert("apple"); strset.insert("orange"); strset

STL set 使用小结

对着背影说爱祢 提交于 2020-01-14 02:48:35
这是微软帮助文档中对集合(set)的解释: “描述了一个控制变长元素序列的对象(注:set中的key和value是Key类型的,而map中的key和value是一个pair结构中的两个分 量)的模板类, 每一个元素包含了一个排序键(sort key)和一个值(value)。对这个序列可以进行查找、插入、删除序列中的任意一个元素,而完成这些操作的时间同这个序列中元素个数的对数成比例关 系, 并且当游标指向一个已删除的元素时,删除操作无效。” 而一个经过更正的和更加实际的定义应该是:一个集合(set)是一个容器,它其中所包含的元素的值是唯一的。这在收集一个数据的具体值的时候是有用的。集 合中的元素按一定的顺序排列,并被作为集合中的实例。如果你需要一个键/值对(pair)来存储数据,map是一个更好的选择。一个集合通过一个链表来组 织,在插入操作和删除操作上比向量(vector)快,但查找或添加末尾的元素时会有些慢。 #include<iostream> #include<string> #include<set> using namespace std; int main() { set<string> strset; set<string>::iterator iter; strset.insert("apple"); strset.insert("orange"); strset

c++ vector的使用,sort,find,易错点

你离开我真会死。 提交于 2020-01-13 04:40:29
闲话: c++容器,使用的最多的有vector,deque与map,各自有不同的特色。而vector也使用得最多,最方便,所有在这里写下vector最常用的sort,find函数以及一些易错点。 正文: vector的优点:申请的空间都是连续的,而且不用自己new,delete分配释放空间,减少内存溢出的风险,访问速度快,可以直接下标访问(list就不可以),对sort函数很友好。 vector的缺点:不可以向头节点添加元素(不可以用作队列),申请空间不可以太大(记得有个函数capacity可以查看最大空间)。 sort排序: eg1:运算符重载进行排序 这里使用到了运算符重载, bool operator <(node node1) ,含义是前一个node(定义的结构体)与后一个node1进行’<'运算是根据哪种规则进行排序(注意是判断真假,所以是bool型的),例子里的规则是比较前一个的序号与后一序号,序号小的排在前面。这里类似于离散数学中自己定义一个偏序关系。 # include <iostream> # include <cstdio> # include <vector> # include <algorithm> using namespace std ; template < class T > struct node { T data ; int serialNum

Caffe源码-im2col操作

心已入冬 提交于 2020-01-12 22:32:32
目录 im2col简介 im2col.cpp源码 小结 参考 @(Caffe源码-im2col操作) im2col简介 caffe的卷积操作中使用im2col来加速,im2col将卷积核中的每个点在图像上的对应点全都提取出来按行排列,得到一个矩阵,这样就将卷积操作转化为矩阵进行操作。 如上图所示的,假设输入图像的形状为 channels=1, height=width=5 ,并且 pad_w=pad_h=1, kernel_h=kernel_w=3, stride_h=stride_w=2, dilation_w=dilation_h=1 。左侧图中蓝色为padding补充的边界,值均为0,绿色为实际图像的数据。其中卷积核中 \(k_{00}\) 位置在整个卷积操作中共计算了 output_h*output_w=9 次,每次的位置在左侧图中用黑色实心圆标注出来。而im2col操作即是将卷积核上的每个点的这些对应位置上的值都提取出来,按照右侧黄色方格的形式存放起来。这样卷积操作可简单地通过将卷积核(中间的红色方格)展成一个向量,然后与右侧的黄色方格矩阵中的每一列点乘来实现。更详细的说明可查看后面列出来的参考博客。 与im2col对应的是col2im操作,即是将矩阵还原成卷积前的图像的形状,不过caffe代码中的 col2im_cpu() 函数还稍微有些改动。 im2col.cpp源码