Installation Problems Problem: installation failed using pip, got ImportError: /lib64/libm.so.6: version `GLIBC_2.23' not found (required by /home/xsx/.conda/envs/tensorflow/lib/python3.7/site-packages/tensorflow/python/_pywrap_tensorflow_internal.so) Solution: install using conda. conda create -n tfgpu python=3.6.8 tensorflow=1.13.1 Reference: Github Issue.
Category: Language
[C++] C++11中函数声明的方式
C++11中有两种声明函数的方式,一种如同C里面继承过来的 return-type identifier ( argument-declarations… ) 另外一种是C++11中新定义的,能够配合decltype配合使用的 auto identifier ( argument-declarations… ) -> return_type 两种定义效果相同,而后者能够方便地使用decltype来推断返回类型,这在泛型编程中十分管用,详见stackoverflow 另外,在C++14中,在函数被调用前能够明确给出定义,并且所有return语句都deduce到相同返回类型,函数还允许这样的简化声明 auto identifier ( argument-declarations… )
[C++] C++11 decltype关键字
在C++11中,decltype和auto都是关于类型的关键字。auto能够在编译时自动选择变量类型(当然还有其他很多用法,这里主要记录decltype),而decltype则能够推测出变量的类型,这与typeid关键字有点相似,但两者的机制完全不同。 typeid typeid使用的是RTTI(Run-Time Type Identification)机制,由于它是在运行时进行类型确认,会影响运行效率。 decltype decltype关键字则是在编译时便确定变量类型,它有许多有用的用法,例如使用已有变量定义新变量的类型、重用匿名类型、泛型编程中结合auto追踪函数的返回值类型(例子如下)。 template <typename _Tx, typename _Ty> auto multiply(_Tx x, _Ty y)->decltype(_Tx*_Ty) { return x*y; } 详细参考原博客
[C++] emplace_back and push_back
在向容器,如std::vector中添加元素时,常常使用push_back(var),这个时候,往往元素要经过拷贝(copy)或者移动(move)才能放进容器中。 而emplace_back()方法则能够就地构造元素(参数列表与元素某个构造函数的参数列表相同,该方法直接将构造的对象放到容器中,不用经过拷贝或者移动),效率更高。 References https://stackoverflow.com/questions/4303513/push-back-vs-emplace-back https://blog.csdn.net/xiaolewennofollow/article/details/52559364
[C++] 涉及类的关键词
C++11里面有许多关键词,以前稍微学过,但是不多用。这几天看一些代码,重温一下这些关键词。 位于函数声明尾部 如 datatype function_name() keyword; const const关键词表示该函数不修改类成员变量。 overide overide表示该函数覆盖掉父类同签名函数的声明。没有overide关键词时,父类的同名函数被hide,需要使用 using fatherClass::function_name; 才能调用父类声明的函数。 = 0 该关键词与virtual一起使用,指明该函数为纯虚函数,子类必须定义。 = default 在C++11中,为了解决特殊成员函数的问题,例如程序员定义的默认构造函数X::X() {}效率并不如编译器自动生成的默认构造函数,引入了defaulted特殊成员函数。在特殊成员函数后面加上= default后,编译器便会自动生成较高效率的默认构造函数。 C++中类的特殊成员函数有:Default constructor, Copy constructor, Move constructor (C++11), Copy assignment operator, Move assignment operator (C++11), Destructor. = delete 在C++11中,为了解决成员函数禁用的问题,引入了delete关键词。成员函数禁用的情况主要有两种:(1)我们想禁止默认复制构造、默认复制赋值;(2)我们不希望子类调用父类的某些函数。
A short tour of markdown
俗话说工欲善其事,必先利其器,今天开始用Markdown写一些笔记,首先应当把markdown熟悉一下,掌握大概框架,以后会更加顺畅。 [TOC] 大标题用一个#号 特殊符号 标题:# 黑体:** 斜体:* 分点:“- ” 背景色:` 引用:”> ” 快捷键 加粗:command + B 斜体:command + I 有序列表:command + option + O 无序列表:command + option + U 引用:command + option + Q 表格 typora使用表格只需按格式键入表格第一行,如下: |项目|价格|数量| 然后键入回车就生成下面的表格,而且在typora中可以很方便调整表格 项目 价格 数量 苹果 12000 3 香蕉 2 6 代码块 使用` \ + 所用语言 #include <iostream> int […]
[Python] 关于Python的变量类型
最近在使用python的时候遇到了一个大坑。 python的变量类型问题:可变类型与不可变类型。 前者最常用的就是list,它在一些方面的使用需要注意: 拷贝时要注意reference,shallow,deepcopy三种类型 传参时要注意,如果使用列表作为默认参数,该变量的修改会影响下次函数调用 全局变量要注意,当有歧义时会作为局部变量
高阶函数
今天学python的时候看到高阶函数我十分激动,因为上个学期学的Haskell也有高阶函数。虽然上个学期并不勤奋地学习Haskell,但是高阶函数仍然在我的脑海里留下深刻的印象,因为高阶函数实在是太太太牛逼了。 所以今天忍不住来复习一波高阶函数。 Haskell中的高阶函数 在Haskell中,有很多很好用的高阶函数,如下面几个: map, filter, foldl, foldr map map :: (a -> b) -> [a] -> [b] map接受一个函数f和一个数列A并返回一个数列。其作用是将函数作用到A中的每一个元素上面 filter filter :: (a -> Bool) -> [a] -> [a] filter是一个过滤器,它接受一个检验函数f和一个数列A并返回一个数列。其作用是用f来过滤A中的元素 foldr, foldl foldr :: (a -> b -> b) -> b -> [a] -> b foldl和foldr的作用是将双参数的函数将列表处理 foldr f z [x1, x2, …, xn] == x1 […]
[Python] 改变工作目录函数
在学习python时写到一个十分简单的备份程序,其中涉及到工作目录的问题。 在使用Linux的zip命令时,例程给出的有效控制台命令是 zip -qr ‘/Users/smith/Desktop/test.zip’ /Users/smith/Desktop/python 但是得到的压缩文件包含python文件所有父目录(直到根目录)。即得到的压缩文件为/Users/smith/Desktop/python及python文件夹内的所有文件,也就是说压缩时连路径也压缩进去了。 然而我想在压缩时把路径省略,其中找到的一个解决法案是让脚本中的工作目录移到python的父目录在执行使用相对路径的zip命令。即在/Users/smith/Desktop目录下,执行 zip -qr ‘/Users/smith/Desktop/test.zip’ python 这就涉及到脚本下工作目录转移的命令,我尝试用os库中的os.system(‘cd XXX’)命令,但是发现执行后,工作目录并没有改变。[这篇文章](http://blog.csdn.net/qq_25467523/article/details/77859429)里面谈到里关于进程调用的过程,也谈到了两种解决方案: (1)使用os.chdir(‘new_path’) (2)使用复合命令如os.system(‘cd new_path && other_command’)