c++11:using的使用
1.当子类想使用父类的非virtual函数时,可以使用using,例如class father{ void func();}class chilren public : father{ using father::func;}
c++11:std::bind
事情是这样的,有两个类,A类中的成员函数要作为B类的回调函数。查阅资料发现,c++11之前类的非静态成员函数,是不能作为回调函数的,编译器会报错。这是因为类的成员函数有一个隐藏的this指针,而回调函数的函数指针的参数是事先确定的,所以只要之前大部分是使用普通函数或静态函数作为回调指针的。c++11后 std::bind可以解决这个问题。例如:class A{public: bool make_callback(int a, std::string& s);//类的非静态成员函数}
c++11:unordered_map和pair合用的坑
事情是这样的,今天在编译的时候报错,很长,报错的地方是std::ordered_map的insert操作,但换成stdmap就没问题,大概是跟std::unordered_map和std::pair有关,我截取几段,error: no matching function for call to ‘std::pair<key, std::_List_iterator<long long int> >::pair(const key&, std::_List_ite
c++ undefined reference to 构造函数
事情是这样的:写了一个普通的类,基本的实现都在头文件中,// data.hppclass data{public: data(); virtual ~data(){}public: int func1() { retunr 1+1; }}我在另外一个类中new 这个data类,但是报错了 “ undefined reference to “data::data()”意思就是无法调用你的构造函数。开始一头雾水,后来才发现,因为我没有创建源文件并且没有在
强化学习&动态规划2 | 策略完善 Policy Improvement
接下来问题就是如何找到更好的策略了,找到更好的策略以后,然后带入该策略,再次进行迭代策略评估,这个过程不断循环得到最优策略。具体过程如下策略评估获得了一个策略并产生值函数,然后我们使用该值函数和策略完善的方法,获得一个潜在完善的新策略,然后带入新策略再次进行策略评估,然后进行策略完善,不断重复,直到收敛于最优策略。那么我们知道值函数以后如何求得更好地策略呢?第一步,将状态值函数转化为动作值函数第二步,选取最大动作值函数的动作算法伪代码如下图表示...
强化学习&动态规划3 | 策略迭代 Policy Iteration
将迭代策略评估和策略优化结合起来,就得到了策略迭代算法算法的伪代码如下,从对等概率随机策略开始,对于每个状态选择动作的概率是一样的。然后进行迭代策略评估获得相应的值函数和策略完善获得更好或者对等的的策略,直至收敛。当然在策略评估这一过程中,我们可以不用θ作为我们的终止条件,而是设定迭代次数,这个算法称为截断策略迭代因为我们其实不用获得极其接近结果的值函数才获得最优策略,如果状态动作对之间的相对值正确,改策略实际上是相同的最优策略...
rdkit&python | 通过isomericSmiles消除smiles中的立体结构信息
from rdkit import Chemsmi = 'CCC/C=C/CC' m = Chem.MolFromSmiles(smi)Chem.MolToSmiles(m, isomericSmiles=False)‘CCC=CCCC’smi = 'CCCC[C@@H](I)C' m = Chem.MolFromSmiles(smi)Chem.MolToSmiles(m, isomericSmiles=False)‘CCCCC(C)I’
AI&模型融合 | 基于牛顿冷却的概率融合
模型融合trick针对F1的权重衰减f1_0, f1_1, f1_2, f1_3, f1_4 = 0.703,0.696,0.715,0.723,0.677f1 = [f1_0, f1_1, f1_2, f1_3, f1_4]f1 = sorted(f1,reverse = True)import mathlamb = 1/4 #超参数 1/3, 1/5def weight_f1(x): """ 牛顿冷却定律 """ return math.exp(-lamb
rdkit&nlp | smiles数据扩增与smiles标准化
from rdkit import Chemfrom rdkit.Chem.Draw import IPythonConsolesmi = 'CC(=O)OC1=CC=CC=C1C(=O)O'mol = Chem.MolFromSmiles(smi)用doRandom产生随机smilesrandom_equivalent_smiles = Chem.MolToSmiles(Chem.MolFromSmiles(smi),doRandom=True)random_equivalent_smil
python&CUDA | 使用numba对三维矩阵在gpu上进行运算
import cv2import numpy as npfrom numba import cudaimport timeimport mathdef process_cpu(img, dst): rows, cols, channels = img.shape for i in range(rows): for j in range(cols): for c in range(channels): colo
VS2019&CUDA | VS2019编程CUDA环境配置
1.打开vs2019,(我们可以观察到,在VS2017模板一栏下方出现了“NVIDIA/CUDA 10.2”。)创建一个空win32程序,即cuda_test项目。2.选择cuda_test,点击右键–>生成依赖项–>生成自定义,选择CUDA10.2。3.右键源文件文件夹->添加->新建项->选择CUDA C/C++File,取名cuda_main。4.点击cuda_main.cu的属性,在配置属性–>常规–>项类型–>选择“CUDA C/C++”。5
rdkit&python | 清洗化学反应脚本
from rdkit import Chemdef canonicalizatonsmi(smi): newsmi = Chem.MolToSmiles(Chem.MolFromSmiles(smi)) return newsmidef canon_reaction(rxnstring): #print("rxnstring:",rxnstring) r,p =rxnstring.split('>>') rs = r.split('.')
pickle导入文件报错AttributeError: Can‘t get attribute ‘XXX‘ on <module ‘__main__‘ from处理
class CustomUnpickler(pickle.Unpickler): def find_class(self, module, name): try: return super().find_class(__name__, name) except AttributeError: return super().find_class(module, name)pickle_data = CustomUnp
CUDA & C++ | 测试环境安装成功 Hello,CUDA!
#include <iostream>#include <stdio.h>__global__ void myfirstkernel(void) {}int main(void) { myfirstkernel << <1, 1 >> > (); printf("Hello, CUDA!\n"); return 0;}__global__告诉编译器在这个限定符后面的函数定义应该在设备上(gpu)而不是主机上(cpu)上运行
今日推荐
周排行