自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

guotianqing的博客

人生如画,画如人生。

  • 博客(301)
  • 收藏
  • 关注

原创 c++矩阵计算性能对比:Eigen和GPU

生成随机矩阵有多种方式,直接了当的方式是使用显式循环的方式为矩阵的每个元素赋随机值。另一种方式是使用Eigen库,它提供了矩阵运算的库。

2022-07-15 18:44:38 3057 1

原创 关于职业生涯发展的一点思考

从学校毕业步入社会,即正式开始了人生职业生涯发展的第一步。总括地说,大概有以下几类职业:这三条道路,几乎概括了大部分普通人的选择。有人选择一条道路,行走余生。有人则三条道路的风景全部饱览一番。不管怎样,绝大部分人走的是第三条路。笔者也是第三条路,在此作一点思考。不管是刚步入公司的应届生,还是做到了职业CEO,从本质上讲,都是受雇于公司的职员。因为它的本质是相同的,即通过出卖自己的时间和精力,来获得公司发放的薪水和奖金。在上个世纪后期,很多人可以在一个普通的岗位上做到退休,好像不需要所谓的职业发展,依然可以体

2022-06-10 19:25:30 1526 3

原创 rsync增量同步文件用法实践

rsyncrsync: remote sync,远程同步,用于在本地机器及远程机器之间同步数据。对于本地机器之内,同步数据使用cp即可。对于本地与远程,使用scp即可。但上面两个命令同步数据时一般是无脑覆盖文件,而rsync则不会直接覆盖以前的数据(如果数据已经存在),而是先判断已经存在的数据和新数据的差异,只有数据不同时才会把不相同的部分覆盖。怎么判定文件有改动呢?默认是检查文件大小和最后修改时间是否一致,如果一致则认为无变动,不会传输该文件,如果不一致则同步。对于想让两台机器某个目录一致的

2022-05-12 19:04:24 6445

原创 shell脚本代码片断:参数个数、当前目录、日期格式

参数个数判断输入的参数个数是否正确:if [ $# != 3 ]; then echo all params size is $# echo "USAGE: $0 param1 param2 param3" exit 1;fi如果未输入参数,使用默认,如果输入了参数,则使用参数:# tradeday默认为当前日期tradeday=$(date +%Y%m%d)# 如果用户输入了参数,则重置tradeday为输入的参数if (($# == 1))then t

2022-05-12 12:28:50 278

原创 获取字符串的md5sum值——分别使用shell、python、c++实现

md5sum在Linux下,我们经常使用md5sum命令来查看两个文件是否相同。md5sum命令会逐位对文件的内容进行校验。是文件的内容,与文件名无关,也就是文件内容相同,其md5值相同。存在两个文件不同,但md5sum相同的情况。不过这个情况出现的概率还是很低的,所以md5值仍然是常用的方法。md5值是一个128位的二进制数据,转换成16进制则是32(128/4)位的进制值。如果对结果的准确性要求极高,可以使用sha系列算法,比如SHA1、SHA256、SHA384、SHA512等。如前所述

2022-05-07 15:08:19 5490

原创 tar显示压缩进度条

进度条tar处理小文件时,非常快,不需要看进度。但当文件比较大时,耗时较长,这时需要个进度条看一下,以评估剩余时间。Linux下,可以使用pv来显示进度。pvpv用来监视数据通过pipe的进度,能够显示耗时、完成率(进度条)、当前吞吐率、总传输字节等信息。使用方式:在两个程序之间,以合适的参数插入pipeline。pv将会把提供的文件拷贝到标准输出,如果没有指定文件,将拷贝标准输入,这时它的行为和cat一致。如,查看使用nc传输一个文件的速度:pv file | nc -w 1 som

2022-04-24 16:35:45 7043

原创 Linux下提高压缩速度——多线程压缩pigz

常用压缩Linux下常用的压缩包括:tar: 如 tar zcvf a.tgz ./azip: 如 zip -qr a.zip ./a如果只在Linux系统上使用,应用最多的是tar,如果涉及到与windows交互,一般用zip。但有一个问题,就是它们在压缩时,最多占用一个cpu到100%,是单线程的,当要处理的文件比较大时,将非常耗时。这里以使用tar为例,来介绍一下多线程压缩工具pigz。使用多线程pigz通过查看tar的man page,可以看到Compression opti

2022-04-24 14:49:35 10935

原创 docker服务及镜像开机自动启动

环境docker安装在Centos7上,机器重启后,发现docker里服务都没启动。查看了一下:% docker ps -aCannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?原来是docker服务没有启动。需要把它设置为开机启动。设置docker服务开机启动先启动服务,再设置为开机自动启动:# 启动服务% systemctl start do

2022-04-15 11:23:00 9241

原创 什么行业越老越吃香?

公务员、医生、律师和教师最近身边越来越多的人感慨,当公务员真好啊!可能是人到中年的缘故,面对着房子、车子、孩子的多重压力,稳定成为最为关心的事情。过了35,年青时的拼劲、闯劲少了很多,上有老,下有小,整天面对着柴米油盐,失业更是难以面对的。所以,讨论什么行业越老越吃香的声音也多了起来。于是,公务员、医生、律师和教师等行业被推崇之至,原因是这些行业的人越老越吃香嘛。甚至已经有以前的同事已经自学转行去了当律师了,这速度、这能力不得不令人叹服!越老越吃香不可否认,“躺着赚钱”大概是所有人的梦想

2022-03-20 21:26:18 612

原创 C++中几个问题的思考

死锁及避免死锁的产生:线程a获得资源x的锁后,去获取资源y的锁,在这个空当,线程b获得了资源y的锁,再去获取x的锁。此时,显然地,a获取y的时候,陷入等待,b获取x的时候,也陷入等待,两个线程因为锁而死亡,即发生了死锁。在实际的项目中,死锁是一种较难发现和定位的程序bug,因为程序表面上看起来一切正常,没有崩溃,不会有coredump。但程序此时的两个线程已经没有在工作了,它们的既定任务也不会被正确地执行,所以无法得到正确的结果。死锁的定位:如果在程序中使用了多个锁,特别是使用了嵌套锁,而线程又

2022-03-20 17:59:34 1050

原创 删除df中值为指定值的行

原始数据假设有以下df:df = pd.DataFrame({'a': [1,2,3,np.nan,4,5], 'b': [4,5,np.nan,6,7,np.nan], 'c': [np.nan,np.nan,'what','how','why',np.nan]})# a b c0 1.0 4.0 NaN1 2.0 5.0 NaN2 3.0 NaN what3 NaN 6.0 how4 4.0 7.0 why5 5.0

2022-03-08 18:16:37 3902

原创 df一列给另一df赋值后得到None

问题解决有两个df1,df2,目的是把df1的列复制到df2,df2原本没有这一列,行数相等。df2['WANTED'] = df1['WANTED']结果发现df2确立有了这一列,但所有的值都是None,不是df1[‘WANTED’]的值。查询原因是这种直接使用等号赋值的方式,只适用于df1和df2具有相同的index的情况下,其他情况会导致值为None。使用insert可以解决这个问题:df2.insert(df2.shape[1], 'WANTED', df1['WANTED'].va

2022-03-08 10:42:26 989

原创 df筛选指定列的字段中含有指定字符串的行

原始数据假设有以下原始df:import pandas as pddf = pd.DataFrame([['a1','b2'],['c1','d3'],['e3','f4']], columns=['x','y'])print(df)#df x y0 a1 b21 c1 d32 e3 f4含有或不含有指定字符串筛选出所有含有指定字符串的行:# 找出x列中所有含有a的行:df[df['x'].str.contains('a')]# x y

2022-03-08 10:06:55 4429

原创 c++ nvcc编译CUDA程序入门示例

nvccnvcc是NVIDIA CUDA Compiler,用来编译host和device程序。这里的术语:host:指CPU及其内存device:指GPU及其内存使用nvcc,就可以编译CUDA程序,CUDA程序包括host代码和device代码。在安装CUDA Toolkit后,nvcc内含其中。注意要安装与显卡版本匹配的CUDA Toolkit。我的nvcc版本:% nvcc --versionnvcc: NVIDIA (R) Cuda compiler driverCop

2022-02-28 18:49:43 5244 1

原创 Linux conda中Tensorflow GPU安装配置全面梳理(包含cuda、cudnn)

CPU VS GPUCPU: 中央处理单元。由数百万个晶体管组成,可以有多个处理内核,执行计算机和操作系统所需的命令和流程。GPU: 图形处理单元。由许多更小、更专业的内核组成的处理器。 在多个内核之间划分并执行一项处理任务时,通过协同工作,这些内核可以提供强大的性能。由于其设计目标的不同,它们分别针对了两种不同的应用场景。CPU需要很强的通用性来处理各种不同的数据类型,同时又要逻辑判断又会引入大量的分支跳转和中断的处理。这些都使得CPU的内部结构异常复杂。CPU 基于低延时的设计,具有强大

2022-02-28 09:53:40 4128

原创 一行命令设置vscode远程连接免密登录

远程连接vscode作为在Windows终端连接到Linux服务器直接进行代码编辑的工具,使用广泛。连接的原理是ssh,使用Remote-ssh插件。具体的连接步骤比较简单,简略说明一下:点击左下角的绿色按键: SSH在弹出的命令行中选择第一个:remote-ssh: connect to host选择增加一个新主机后面按提示填写主机地址、用户名、密码等信息即可连接成功等待底层命令行输出窗口显示连接成功后,可打开服务器上文件夹、编辑文件,非常方便。但是,每次重新连接后,都要输入密码,

2022-02-21 13:08:06 1501

原创 如何做一名合格的管理者?

定义管理者首先,需要定义一下管理者。我认为,作为一名管理者,需要符合下述条件:有项目有能够调动的人力资源(你应该能够直接或间接决定他们的薪水)被上级管理(如果你位于金字塔的顶端,我认为你不只是一名管理者,不在本文讨论之列)只有手握项目的人,才有可能成为管理者。因为如果你没有项目,很难凝聚到人才,谈管理无异于纸上谈兵。有了项目,就需要人来做。当你自己忙不过来时,你考虑组建团队,自己负责统筹把控,对项目结果负责,具体执行由团队成员负责。但如果你并没有能够决定团队成员薪水的权力时,别人未必听

2022-02-03 20:25:45 978

原创 执行shell脚本报错:Syntax error “(” unexpected

现象在centos下可以运行的脚本,拷贝到ubuntu下直接执行报错:./restart.sh: 5: ./restart.sh: Syntax error: "(" unexpected检查脚本没有问题,使用命令调试执行脚本时也没有问题:bash -x restart.sh奇怪了。排查使用调试执行没有问题,就证明脚本本身没有问题,那就是环境可能有问题。也就是说,直接执行脚本时,不是使用bash执行的。经查,在ubuntu上,sh是/bin/dash的软链接,好吧,直接执行脚本是d

2022-01-29 17:43:38 12315

原创 DataFrame进行数据分组运算并筛选指定条件的group

需求假设有个股票行情文件,内容如下,数据为虚构:code,time,open,high,low000001.SZ,095000,2,3,2.5000001.SZ,095300,2,3,2.5000001.SZ,095600,2,3,2.5000002.SZ,095000,2,3,2.5000003.SZ,095600,2,3,2.5000003.SZ,095900,2,3,2.5现在要计算每支股票high和low的均值,如果某股票的行情条数不足2条,则忽略不计。实现问题不难,方法

2022-01-26 15:41:49 8774

原创 批量更新指定目录下git仓库的一种方式

需求有一些github上的项目,学习使用时拉取的master,过了一段时间,想更新到最新,需要一个一个目录进去执行git pull。当目录比较多时,或者需要经常同步更新时,就比较繁索。写个小脚本,分分钟搞定它吧!shell脚本我平时在Linux上开发,于是shell脚本是第一选择。其实在windows上,使用git bash也是一样。废话不说,代码如下:#!/bin/bashfunction showGreen(){ echo -e "\033[32m $1 \033[0m

2022-01-25 15:51:52 1301

原创 关于git中的游离分支

游离分支所谓游离分支,就是处于detached状态的分支,这里显示的不是分支的名称(如,main),而是显示一串hash值:ubun:~/work/@e9781a5 % gstHEAD detached at e9781a5Changes not staged for commit: (use "git add <file>..." to update what will be committed) (use "git restore <file>..." to d

2022-01-12 15:35:32 3144

原创 python中变量的赋值、浅拷贝、深拷贝

问题写一段测试程序,我本意是想从一个DataFrame对象复制出来一个独立的副本出来,代码如下:df = pd.DataFrame()df1 = df# 改变df1的元素df1[row][col] = 'b'print(df)print(df1)结果打印出来的df也改变了。也就是说,在改变df1的时候df也改变了,它们实际指向的同一块内存。如何解决这个问题呢,查阅了一些资料,把原理和解决思路作一记录。两类对象首先来了解一下python中的两类对象:不可变对象和可变对象。

2022-01-05 18:58:21 1337 1

原创 DataFrame写入hdf文件失败:object header message is too large

现象使用hdf5文件的API,直接把DataFrame写入hdf文件:import pandas as pd#...df = pd.DataFrame(index=index, columns=columns)df .to_hdf('test.hdf5', 'data', format='t', mode='w')to_hdf一行报错:object header message is too large有时候也会报另外一种错误:解决通过查看文档说明,可以发现HDF5对列头有

2021-12-25 14:21:38 953

原创 DataFrame保存hdf5文件报错:TypeError:object of type ‘int‘ has no len()4

背景最近需要把数据从csv文件中读取出来,然后写入hdf5中。使用DataFrame读取csv,然后调用df的to_hdf方法直接写入hdf5文件。我使用的是table模式,示例代码如下:import pandas as pdimport numpy as npdays = ['2021-01-01', '2021-01-02']country = ['usa', 'china','rusia']df = pd.DataFrame(index=days, columns=country)

2021-12-19 20:58:04 1743

原创 CMake识别操作系统平台及Linux发行版本是ubuntu/centos

识别操作系统平台以下代码可以识别 Windows、Linux、Macos三种类型的操作系统平台:IF (CMAKE_SYSTEM_NAME MATCHES "Linux") MESSAGE(STATUS "current platform: Linux ") ELSEIF (CMAKE_SYSTEM_NAME MATCHES "Windows") MESSAGE(STATUS "current platform: Windows") ELSEIF (CMAKE_SYSTEM_N

2021-12-01 18:02:30 3764

原创 CMake中执行shell命令之execute_process、add_custom_target和add_custom_command

背景以下情况可能需要在CMake中执行shell脚本:cmake未提供的功能而实际构建中又需要时,如获取Linux发行版本项目构建时需要执行脚本才能完成,如boost构建过程有的需要shell脚本的返回值,而有的不需要,这个关系不大。本文主要关注的是在cmake中执行shell脚本的方法。主要涉及三个命令:execute_process、add_custom_target和add_custom_command。execute_process通过execute_process方法可以执行

2021-12-01 17:59:30 15946 3

原创 c++中set和unordered_set的区别

作用set与unordered_set一样,都是关联式容器,和 map 容器不同,使用 set 容器存储的各个键值对,要求键 key 和值 value 必须相等。当使用 set 容器存储键值对时,只需要为其提供各键值对中的 value 值(也就是 key 的值)即可。使用 set 容器存储的各个元素的值必须各不相同。从语法上讲 set 容器并没有强制对存储元素的类型做 const 修饰,即 set 容器中存储的元素的值是可以修改的。但是,C++ 标准为了防止用户修改容器中元素的值,对所有可能会实现

2021-11-29 19:07:03 1856

原创 Linux查看磁盘性能

查看磁盘类型当前磁盘中速度最快的应该是SSD了。查看命令:> yum install lsscsi> lsscsi # 列出 SCSI 设备(或主机)及其属性[0:2:0:0] disk DELL PERC H330 Adp 4.30 /dev/sda [14:0:0:0] cd/dvd HL-DT-ST DVD+-RW GU90N A3C3 /dev/sr0显然,我的电脑上没有SSD,只是普通的磁盘。如果有SSD,第5列会显示S

2021-11-01 14:32:37 3511

原创 mysql安装及主从配置

mysql安装我使用的系统是centos7,默认安装的版本是5.7.29。以下操作在主从节点都要执行。安装步骤如下:wget -i -c http://repo.mysql.com/mysql57-community-release-el7.rpmyum -y install mysql57-community-release-el7.rpm yum -y install mysql-community-server mysql-develmysql设置以下操作在主从节点都要执行。启

2021-10-27 13:58:34 254

原创 unordered_map多线程崩溃在find

崩溃最近程序中出现了崩溃现象,经过查询,发现是崩溃在STL容器的查询中。崩溃的截图如下:关于unordered_map无序 map 容器,unordered_map 容器不会像 map 容器那样对存储的数据进行排序。unordered_map 容器底层采用的是哈希表存储结构,该结构本身不具有对数据的排序功能,所以此容器内部不会自行对存储的键值对进行排序。关联容器删除一个元素的时候,当前的迭代器会失效,其他的迭代器不会失效,增加一个元素的时候,迭代器不会失效。线程安全性的保证:多线程同

2021-09-23 18:16:59 5355 1

原创 沪深股票代码区分及标的数量

深A截止目前,深A共两个板块:主板和创业板。其中,主板包含了原来的主板和中小板。主板代码以00开头,标的数量共1500+支,包括:002(原中小板)001000003创业板以30开头,标的数量共1100+支,包括:300301各个代码开头的标的数量为:code板块数量000主板450+001主板20+002主板1000+003主板50+300创业板1000+301创业板60+沪A沪A也共有

2021-09-16 14:49:56 1276

原创 DataFrame筛选出指定列值的行

需求对于一个DataFrame,常常需要筛选出某列为指定值的行。pandas中获取数据的有以下几种方法:布尔索引位置索引标签索引使用API假设df数据如下:import pandas as pdimport numpy as npdf = pd.DataFrame({'code': '000001.SZ 000002.SZ 000006.SZ 000009.SZ'.split(), 'open': '1.2 20 3.5 2.8'.split

2021-08-25 18:34:51 44138 1

原创 Python中把字典dic转换为DataFrame

需求有时候,需要把dic转换为DataFrame格式,便于查看和存储。假设有以下的dic:dic={'a':"1", 'b': "2", 'c':'3'}本文来探讨一下把它转换为df的几种方式。直接转换:key为列名直接转换时,需要把字典转化为list来操作:import pandas as pddic={'a':"1", 'b': "2", 'c':'3'}df= pd.DataFrame([dic])print(df)输出如下: a b c0 1 2 3

2021-08-25 16:59:34 10210 2

原创 程序员从技术到管理之路

技术之路蓝图作为普通的技术开发工程师,大部分的职业之路可能就是下面的这样的:大学毕业之后作为初级研发工程师进入企业经过三年的学习和历练,逐渐开始作为项目负责人主导项目开发再经过两年的项目历练,已经能够独立负责项目核心模块开发,解决问题的能力得到大幅提升再经过两年的历练,如果负责的项目进展顺利,得到老板赏识,可能会被扶正,授予项目技术经理头衔,负责项目技术架构和攻关再经过两年,一直保持工作的热情和干劲,大概率能够成为项目经理,总体负责项目进度,向部门经理汇报好了,作为技术人,好好干,经过大

2021-08-21 15:28:45 806

原创 Redis集群指定主从关系及动态增删节点

集群创建我们常用以下命令创建集群:redis-cli --cluster create 127.0.0.1:7000 127.0.0.1:7001 127.0.0.1:7002 127.0.0.1:7003 127.0.0.1:7004 127.0.0.1:7005 --cluster-replicas 1这样就创建了一个具有3个主节点和3个从节点的集群。其中,我们虽然指定了每个主节点都有一个从节点,但哪个是7000的从节点,却是随机分配的,直到集群创建完毕,才能确定是7003、7004还是700

2021-08-18 13:56:22 8082 3

原创 Redis集群删除和重建

删除Redis集群创建好后,一般会有以下文件生成:$ tree.├── appendonly.aof├── dump.rdb├── nodes-7000.conf├── redis.conf└── redis-server0 directories, 5 files其中,nodes-*.conf记录了Redis集群的信息。要想删除一个集群,首先关闭Redis服务,方法如下:redis-cli -h 127.0.0.1 -p 7000 shutdown关闭所有集群上节点后,进入

2021-08-13 17:28:04 6382

原创 padas替换DataFrame中值

总括常见的替换包括:把一列中的某个旧值替换为一个新值:df['column_name'] = df['column_name'].replace(['old_value'],'new_value')把一列中的多个旧值替换为一个新值:df['column name'] = df['column name'].replace(['1st old value','2nd old value',...],'new value')把一列中的多个旧值替换为多个新值:df['column name'] = d

2021-07-22 18:05:00 816

原创 pandas修改DataFrame行/列/字段值

pandas修改dataframe行/列/字段值增加/修改一列有如下几种方法增加一列:增加具有相同值的一列import pandas as pd dict= {'English':[85,73,98], 'Math':[60,80,58], 'Science':[90,60,74], 'French': [95,87,92] } df=pd.DataFrame(dict,index=['2018','2019','2020']) print(df)

2021-07-22 17:28:27 26091 1

原创 数值在容器中的分位数

背景存在一个数据序列,且持续有新的数据到来,需要知道当前到来的数据在原数据序列的分位数。假设数据是double类型,序列存储在vector中。实现方案有多种方式可以实现该功能。暴力法最直观的方式是使用暴力法解决。对vector排序,然后遍历整个容器,找到给定值的index,得到index/vector.size即为分位数。代码如下:void GetQuantileForLoop(const vector<double>& ori, const double val)

2021-07-06 18:47:17 241

原创 protobuf解析出错:Windows与Linux通信之string乱码

现象Windows上程序与Linux上程序通信,具体为Windows程序读取机器上一个文件,把数据信息发送到Linxu进程。Linxu进程负责把结构体使用protobuf编码,写入redis,然后在有人请求的时候读出来展示。问题就出在了,编码和写入都成功了,查询的时候却报pb解析失败,一时摸不到头脑。定位及解决经过跟踪和分析,结构体中有一string,当windows进程读取到的该字段为英文时,到Linux进程中显示是正常的。当该字段为中文时,Linux进程日志中显示该字段为乱码:定位是

2021-06-09 07:44:10 2429

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除