没有ggplot这个函数_这个R包不太冷系列——GOplot(功能富集绘图)

功能富集分析,是指借助各类数据库和分析工具进行统计分析。挖掘在数据库中与我们研究的生物学问题具有显著相关性的功能类别,期望发现在生物学过程中起关键作用的生物通路,从而揭示和理解生物学过程的基本分子机制。其中GO富集分析就是重要的一个内容。 通常我们可以很容易的通过各类在线网站得到GO富集结果,而后期的可视化往往是八仙过海,各显神通。 今天小鹿特别奉上一件法宝--GOplot,让你的可视化呈现与众不同。作为一款风格别致的GO可视化利器,这款R包相信大多数人已经有所接触,但很少去使用。接下来就带大家看一看GOplot都有哪些功能吧! 话不多说,首先简单欣赏一下GOplot例图: 是不是比常规的柱状图和气泡图更加夺目呢?下面我们用第三幅为例,详细展示绘制过程: 数据准备 很多推文都有介绍过GOplot软件包,但都只是运行一下示例数据、展示结果。具体运用到自己的数据还是有些难度的,因此第一道坎就是我们要准备什么样的数据。 以上是绘制该图必需数据,首先是GO的id、term信息、所属分类、校正后p值以及所含的蛋白/基因名。值得注意的是,多个蛋白/基因名必须是逗号分隔;其次是蛋白信息,即蛋白与相对应的FC值。 数据“微整形”及绘图 1.加载R包,没有则需安装: >library(GOplot) 载入需要的程辑包:ggplot2 载入需要的程辑包:ggdendro 载入需要的程辑包:gridExtra 载入需要的程辑包:RColorBrewer 由依赖包可以看出,GOplot所绘制的图都是依据ggplot的。 2.导入数据 library(openxlsx) go<-read.table("GO.xls",sep="t", header=T, quote="") pro<-read.xlsx("protein.xlsx") #如果go最后一列有引号,应使用gsub去掉 3.数据“微整” colnames(go)<-c( 'ID', 'term','category','adj_pval','genes') pro$FC<-log(pro$FC) colnames(pro)<-c("ID","logFC") 如图所示: 总的来说,就是换了列名,计算了logFC,至于原因;当然是因为该程辑包里面把名称固定了。 绘图前的“黑暗” 虽然距离绘图不远了,但图所对应的数据并不是微调后的两个数据框,我们还需伪装一下打入GOplot内部。伪装其实是对输入的两张表进行整合,把每个term所对应的蛋白和logFC逐个排列下来。 运行命令: circ <- circle_dat(go,pro) 结果展示: 值得注意的是最后一列的zscore,公式为: zscore反映该功能所含蛋白的总体表达趋势,大于0为上调,小于0为下调。 打入内部后,我们就要回想一下目的,和弦图主要是展示感兴趣的蛋白和感兴趣的GO条目之间的关系。那么先选定目标,以前六条为例,蛋白为所有蛋白,因为不在选定条目内的蛋白会被剔除。 gop<-go[1:6,] chord <-chord_dat(data = circ, genes = pro,process = gop$te 运行命令得到一个矩阵,表示每个蛋白是否具有选定的功能,具有显示为1,否则为0。 绘图!!! 运行代码: GOChord(chord, space = 0.02, gene.order = 'logFC', gene.space = 0.25, gene.size = 4) 左面为蛋白名,红色表示上调,蓝色表示下调。右面为所选GO term。

118. 杨辉三角

给定一个非负整数 numRows,生成杨辉三角的前 numRows 行。 在杨辉三角中,每个数是它左上方和右上方的数的和。 示例: 输入: 5 输出: [ [1], [1,1], [1,2,1], [1,3,3,1], [1,4,6,4,1] ] 通过次数138,732提交次数199,577 /** * @param {number} numRows * @return {number[][]} */ var generate = function(numRows) { const res = []; for(let i=0;i<numRows;i++) { const row = []; for(let j=0;j<=i;j++) { if(j === 0) { row.push(1); } else if(i === j) { row.push(1); } else { row.push(res[i-1][j-1] + res[i-1][j]); } } res.push(row); } return res; };

ros中二维激光的消息类型 sensor_msgs/LaserScan 内容解读

最近涉及到二维激光数据内容的问题,再次记录一下。 sensor_msgs/LaserScan.msg 文件的路径 /opt/ros/kinetic/share/sensor_msgs/msg/LaserScan.msg 主要内容: # Single scan from a planar laser range-finder # # If you have another ranging device with different behavior (e.g. a sonar # array), please find or create a different message, since applications # will make fairly laser-specific assumptions about this data Header header # timestamp in the header is the acquisition time of # the first ray in the scan. # # in frame frame_id, angles are measured around # the positive Z axis (counterclockwise, if Z is up) # with zero angle being forward along the x axis float32 angle_min # start angle of the scan [rad] float32 angle_max # end angle of the scan [rad] float32 angle_increment # angular distance between measurements [rad] float32 time_increment # time between measurements [seconds] - if your scanner # is moving, this will be used in interpolating position # of 3d points float32 scan_time # time between scans [seconds] float32 range_min # minimum range value [m] float32 range_max # maximum range value [m] float32[] ranges # range data [m] (Note: values < range_min or > range_max should be discarded) float32[] intensities # intensity data [device-specific units].

Maven home directory无法修改成功的解决方法(图文)。

问题:在写springboot项目时,修改Maven home directory一直无法成功,修改了应用OK后还是会返回原来的.m2文件夹下面默认的文件夹中。 问题如下, 在网上找了一个多小时都没找到解决方法,比较有意思的是其中有一篇叫做更改.project文件的方法被别人爬了几十遍了。但是因为我可能是2020.2版本的idea吧。安装目录没找到那个文件。此时的心态就是, 后来找到别人的一个做法,说是因为配置了阿里云镜像的原因,所以会默认更改这个存储路径。 解决方法:删除项目.mvn下的wrapper下的maven-wrapper.properties文件。然后再重新修改一下,就能成功了。 如果有大佬知道更好的方法欢迎评论或私聊我,感激不尽。

【微机原理与接口技术】实验4 定时器与计数器(8253)

定时器与计数器(8253) 实验4-1 计数器实验实验4-2 定时器实验 实验4-1 计数器实验 io8253a equ 283h io8253b equ 280h code segment assume cs:code start: ;补充编程,设置8253通道0的工作方式,送计数初值为0FH MOV AL,14H ;设置8253通道0工作方式2,二进制计数 MOV DX,io8253a OUT DX,AL ;将工作方式送到283H窗口 MOV AL,0FH ;设置初始值0FH MOV DX,io8253b OUT DX,AL ;送初始值 lll: IN AL,DX ;补充编程,读计数初值 call disp ;调显示子程序 push dx ;保护作用 mov ah,06h ;直接控制台的读写功能 mov dl,0ffh ;输入,dl为输入字符的ascii码 int 21h pop dx jz lll mov ah,4ch ;退出 int 21h disp PROC NEAR ;补充,显示子程序 PUSH DX ;保护作用 AND AL,0FH MOV DL,AL CMP DL,9 ;判断是否小于9 JLE NUM ;如果在'0'-'9',跳转到NUM 0--48 ADD DL,7 ;否则为‘A’-'F'加37H a的ASCII码为97 A的ASCII码为65 NUM: ADD DL,30H MOV AH,02H ;显示 INT 21H mov dl,0dh ;加回车符 int 21h mov dl,0ah ;加换行符 int 21h pop dx ret ;子程序返回 disp endp code ends end start 实验4-2 定时器实验 io8253a equ 280h io8253b equ 281h io8253c equ 283h code segment assume cs:code start: mov dx,io8253c mov AL,36h ;设通道0的工作方式为3 00110110 out dx,al ;向8253写控制字 mov ax,1000 ;写入初始值1000 mov dx,io8253a out dx,al ;写入低字节 mov al,ah out dx,al ;写入高字节 mov dx,io8253c mov al, 76h out dx,al ;设通道1为工作方式3 01110110 mov ax,1000 mov dx,io8253b out dx,al ;写入低字节 mov al,ah out dx,al ;写入高字节 mov ah,4ch ;程序退出 int 21h code ends end start

q87主板支持cpu型号_十代酷睿来了,四代酷睿配套主板才准备停产

根据此前的报道,英特尔今年的十代桌面级处理器新品很快就将正式发布了,此次十代处理器虽然沿用了14nm的工艺,但在频率、核心数等方面对比前代都实现了很大的超越,算得上是一次优秀的升级。 但电子产品毕竟有着较长的生命周期,尤其是CPU,一些几年前的产品放到现在来看性能依旧不差,只是缺少了一些新功能的加持,但胜在价格便宜实惠,这也是很多“又不是不能用”党信奉的准则。而要说现在二手市场上流通比较多的,就要数英特尔在2014年左右推出的四代酷睿处理器了,虽然这些处理器距今已经有不少年了,但其实可以搭配的主板芯片组直到现在依旧在生产。 根据Tom's Hardware的报道,英特尔在本周发布了一则产品变更通知文件,文件中表示H81、Q87、C226、QM87和HM86芯片组将正式停产。这一系列芯片组最早于2013年推出,基于32nm工艺,适用于英特尔Haswell系列处理器,LGA 1150插槽,这一系列芯片组主板多用于配合四代酷睿和当年红极一时的E3-1230等处理器。 据官方说法,英特尔合作伙伴可以在2021年3月31日前下订单,而最后发货时间为2021年9月30日。即便目前仍旧有不少这些主板的新品在售,但是相比于现在的处理器产品,搭配主板的四代酷睿处理器已经缺失了很多先进的指令集,而且对于NVMe硬盘等新硬件的支持也非常有限。因此除非实在是预算过少,否则不建议购买这些老旧的产品。 本文编辑:NJNR105

python库在哪个文件夹下?

查看Python安装目录: window下,输入命令: where python linux下,输入命令: whereis python 查看模块的安装列表: 查看pip安装了多少包,输入命令: pip list 查看模块安装路径: 使用pip安装完包后,只需再执行一次命令pip install xx,就会显示安装路径。 如:pip install jupyter安装完成后,再次输入pip install jupyter就会显示此包已经安装的路径了。 由此可知jupyter包安装在了C:\Users\xin\AppData\Local\Programs\Python\Python35\Lib\site-packages下面,进入文件夹查看。 果然在这里。而且发现一个大的秘密:原来所有的通过pip安装的包都在这个目录下。 请记住这个路径:C:\Users\用户\AppData\Local\Programs\Python\Python35\Lib\site-packages

python不属于鼠标事件的是_selenium-webdriver(python) (十五) -- 鼠标事件

本节重点: ActionChains 类 context_click() 右击 double_click() 双击 drag_and_drop() 拖动 测试的产品中有一个操作是右键点击文件列表会弹出一个快捷菜单,可以方便的选择快捷菜单中的选择对文件进行操作(删除、移动、重命名),之前学习元素的点击非常简单: driver.find_element_by_id(“xxx”).click() 那么鼠标的双击、右击、拖动等是否也是这样的写法呢?例如右击: driver.find_element_by_id(“xxx”).context_click() 经过运行脚本得到了下面的错误提示: AttributeError: 'WebElement' object has no attribute 'context_click' 提示右点方法不属于webelement对象,通过查找文档,发现属于ActionChains 类,但文档中没有具体写法。这里要感谢 北京-QC-rabbit 的指点,其实整个python+selenium 学习过程都要感谢 北京-QC-rabbit 的指点。 下面介绍鼠标右键的用法,以快播私有云为例: #coding=utf-8 from selenium importwebdriverfrom selenium.webdriver.common.action_chains importActionChainsimporttime driver=webdriver.Firefox() driver.get("http://passport.kuaibo.com/login/?referrer=http%3A%2F%2Fwebcloud.kuaibo.com%2F")#登陆快播私有云 driver.find_element_by_id("user_name").send_keys("username") driver.find_element_by_id("user_pwd").send_keys("123456") driver.find_element_by_id("dl_an_submit").click() time.sleep(3)#定位到要右击的元素 qqq =driver.find_element_by_xpath("/html/body/div/div[2]/div[2]/div/div[3]/table/tbody/tr/td[2]")#对定位到的元素执行鼠标右键操作 ActionChains(driver).context_click(qqq).perform()'''#你也可以使用三行的写法,但我觉得上面两行写法更容易理解 chain = ActionChains(driver) implement = driver.find_element_by_xpath("/html/body/div/div[2]/div[2]/div/div[3]/table/tbody/tr/td[2]") chain.context_click(implement).perform()'''time.sleep(3) #休眠3秒 driver.close() 这里需要注意的是,在使用ActionChains 类之前,要先将包引入。 右击的操作会了,下面的其它方法比葫芦画瓢也能写出来。 鼠标双击的写法: #定位到要双击的元素 qqq =driver.find_element_by_xpath("xxx")#对定位到的元素执行鼠标双击操作 ActionChains(driver).double_click(qqq).perform() 鼠标拖放操作的写法: #定位元素的原位置 element = driver.find_element_by_name("source")#定位元素要移动到的目标位置 target = driver.find_element_by_name("target")#执行元素的移动操作

QT QSqlError(“2036“, “QMYSQL3: Unable to bind value“)解决

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 完整问题描述一、tableView控件插入数据失败1.错误描述2.问题查找3.成功解决 总结: 完整问题描述 QSqlError(“2036”, “QMYSQL3: Unable to bind value”, “Using unsupported buffer type: 437325656 (parameter: 3)”) 继上一次Qt连接数据库报错QSqlDatabase: QMYSQL driver not loaded,通过添加sql动态连接文件libmysql.dll解决后,又被tableView控件可视化操作数据库和query.addBindValue(),query.bindValue()多行插入一直失败困扰,今天终于得到解决 一、tableView控件插入数据失败 1.错误描述 输入要插入的数据点击按钮触发submitAll() model->submitAll();//提交动作 事件后,数据插入失败,但是删除数据和查找是能成功执行的,lastError() qDebug()<<model->lastError(); 打印错误提示显示错误QSqlError(“2036”, “QMYSQL3: Unable to bind value”, “Using unsupported buffer type: 437325656 (parameter: 3)”). 2.问题查找 百度问题,大多是都是说数据库驱动,连接文件之类的,还有说到这个报错是版本太高,所以后面下载了不是很高的版本的文件做尝试,最后基本确定还是libmysql.dll文件的问题,虽然上次使用的文件能成功连接数据库但是依然存在问题,于是偶然发现了MySQL官网Oracle有适用各个平台的各个版本的连接下载,下载地址 Qt选择的是MySQL Connector/C 3.成功解决 由于上一次数据库连接失败,上一文:Qt连接数据库报错QSqlDatabase: QMYSQL driver not loaded:写到的尝试过将下载的mysql中的libmysql.dll文件添加到Qt目录中失 败认为可能是mysql 64位和Qt 32位,位数不匹配的问题,此次我选择下载了不是很新(6.1.1 2017)版本的64(mysql-connector-c-6.1.11-winx64.zip)位和32(mysql-connector-c-6.1.11-win32.zip)版本做尝试。 压缩文件lib目录下就有libmysql.dll文件,放到Qt bin目录下覆盖原来的文件,直接编译运行,依然报错QSqlDatabase: QMYSQL driver not loaded吗,然后使用32位的文件,**成功运行,且测试多行数据插入,完美执行,数据插入成功,最后在tableView中插入数据,也成功插入数据,最后问题完美解决! 总结: 本来都不打算解决这个问题因为实在没有头绪,觉得可能是操作版本不兼容之类的问题也不想再重装数据库,开发环境啥的,实在太麻烦,看到有的大佬重装过几个版本的数据库都失败,真的是很佩服解决问题的决心和行动力。 有这个问题的小伙伴可以试试,刚开始写博客记录错误解决,排版啥的还不是很熟悉····

LocalDateTime从前端传参无法接收

前提:设计库设计用的Localdatetime类型,可以精确到秒,但是前端传参数过来的时候是时间格式(2020-12-7 09:57:27)的String类型,业务层进行处理的时候无法直接转换,要调用utils工具类转换,这样一来很每次都很麻烦,想着在aop拦截的时候拦截指定字段的后缀进行转换,后面发现其实不用,因为Localdatetime都是添加或者修改时候使用,add用的mybatis-plus可以不用管,只有edit的时候才会使用。 解决:1:传的参数前@RequestBody,里面自带封装转换 2:写工具类,每次调用转换 3:在拦截器里设置指定格式后缀拦截转换,比如 xx_datetime,拦截_datetime后缀进行转换格式

前端面试常见手写题目

1.实现防抖 function debounce(fn,delay = 200){ if(typeof fn !== 'function'){ throw new TypeError('fn is not a function') } let lastFn = null; return function(...args){ if(lastFn) clearTimeout(lastFn) lastFn = setTimeout(()=>{ fn.call(this,...args) },delay) } } function clickHandle(){ console.log('test') } window.onscroll = debounce(clickHandle,500) 2.实现接节流 function throttle(fn,delay = 200){ if(typeof fn !== 'function'){ throw new TypeError('fn is not a function') } let flag = null; return function(...args){ if(!flag){ setTimeout(()=>{ flag = true fn.call(this,...args) },delay) } } } function clickHandle(){ console.

经纬度与墨卡托坐标转化

处理经纬度数据时,经常需要计算欧式空间下的若干特征,比如长度、距离、角度等。本文介绍经纬度与墨卡托坐标系下的两两转换。 import math #经纬度转墨卡托坐标 def ls(lng,lat): # list=ll_wl.split(',') lat=float(lat) lng=float(lng) x = lng* 20037508.34 / 180 y = math.log(math.tan((90 + lat) * math.pi / 360)) / (math.pi / 180) y = y * 20037508.34 / 180 print (str(x),str(y)) #墨卡托坐标转经纬度坐标 def ll(x,y): x=float(x) y=float(y) x=x/20037508.34*180 y=y/20037508.34*180 y=180/math.pi*(2*math.atan(math.exp(y*math.pi/180))-math.pi/2) print (x,y) if __name__ == '__main__': ls('104.073694','30.697218') ll('11585430.619442267','3593489.251439686')

一起来学python吧(自动化办公)

自动化创建文件夹 先自我介绍一下本人,大二学生算法课代表一枚,因收作业是以文件形式传过来的,需要将文件格式化处理(重新统一命名并放到以命名的文件夹里面去)因此特地学习了python中的os模块库,写了一个自动化创建文件夹并移动文件的脚本代码贴下面了,路径名要根据自己的来改,需要的小伙伴可以自取,给个赞也行呗!例如将A路径下全部文件夹里面的文件移动到B文件夹中, 可能我和大家的需求逻辑会不一样,到时候根据代码改一下就行啦! 在这里插入代码片 import os, shutil # 导入所需的两个模块 # 列出A_path路径下文件夹的名称 A_total_name_list = os.listdir(path) for i in total_name_list: target_path = '' # 所需要移动到的B目录下 src_path_file = path + '/' + i # 所需移动的文件夹 if (len(os.listdir(src_path_file)) != 0): # 如果文件夹里面有内容 # 将文件夹内容移动到B目录下 shutil.move(src_path_file + '/' + os.listdir(src_path_file)[0], target_path_file) 以上便是我分享的内容啦,若有疑问的地方,欢迎评论区留言!关注夜斗小神社,我的目标: 十万行代码!

python存储numpy数据为文件_3.5Python数据处理篇之Numpy系列(五)---numpy文件的存取

目录: 目录: 1.以文本形式存取 2.以任意的形式存取 3.以np自定义的形式存取 (一)以文本形式存取 1.说明: (1)适用范围:存储一维,二维数组 (2)局限性:不能存储多维数组 2.语法解释: (1)写文件 从数组到文件 np.savetxt(frame,array,fmt="%1.8e",delimiter=None) frame -> 文件名,字符串 array -> 数据的来源,数组 fmt ->写入的格式 delimiter ->分隔符 (2)读文件 从文件到数组 np.loadtxt(frame,dtype=np.float,delimiter=None) frame -> 数据的来源,文件名,字符串 dtype -> 数据读取的格式类型 delimiter ->分隔符 3.实例(以.csv文件为例) import numpy as np # 生成一个数组 a = np.arange(100).reshape(5,20) # 写入到文件 np.savetxt('a.csv',a,fmt="%2d",delimiter=',') # 读取到数组变量 b = np.loadtxt('a.csv',dtype=np.float,delimiter=',') print(b) csv文件是一种常用的数据存储方式,可以用excel操作,分隔符是用逗号。 4.效果展示 (二)以任意的形式存取 1.说明: 适用范围:可以是任意种文件类型.txt .bat .csv .dot 局限性:丢失了数据的维度信息,按顺序存储数据。 2.语法解释: (1)写文件 a.tofile(frame,sep='',format='%s') a ->数组 frame ->文件名,字符串

python 图片生成视频_python--通过cv2多张图片生成视频

1、安装cv pip install python-opencv 2、使用 # 图片合成视频 def picvideo(path,size): # path = r'C:\Users\Administrator\Desktop\1\huaixiao\\'#文件路径 filelist = os.listdir(path) #获取该目录下的所有文件名 ''' fps: 帧率:1秒钟有n张图片写进去[控制一张图片停留5秒钟,那就是帧率为1,重复播放这张图片5次] 如果文件夹下有50张 534*300的图片,这里设置1秒钟播放5张,那么这个视频的时长就是10秒 ''' fps = 1 # size = (591,705) #图片的分辨率片 fourcc = cv2.VideoWriter_fourcc(*'XVID') #fourcc = cv2.VideoWriter_fourcc(*'MP4v') #VideoWriter = cv2.VideoWriter('a.avi', fourcc,fps, size) VideoWriter = cv2.VideoWriter('a.avi', fourcc,fps, size) for item in filelist: if item.endswith('.jpg'): #判断图片后缀是否是.png item = path + '/' + item # print(item) # im = Image.open(item) # print(im.format)

软件测试项目经验案例_软件测试工程师转型项目经理-PMP备考经验与心得分享...

大家好!我来自北京,从事IT软件行业已有8年时间。萌生考取PMP证书的想法还是源于一个契机,当时公司提供给我一个从软件测试工程师转型为项目经理的机会,这正是我职业规划中的一个重要选项,当机立断,本着要以专业的态度接受这个职位的挑战,经过同事的推荐,于2019年3月正式与光环国际结缘。 说到老师,真的是被杨述老师的个人魅力所折服。讲课逻辑清晰,谈吐幽默,总是时不时被老师的幽默感逗得笑出声。老师的讲课内容重点突出,所举的示例都非常贴切,一些很难懂的知识点,比如挣值分析,通过老师的一个简单的举例,就可以轻松理解,并且印象深刻,不会轻易遗忘。要知道在这之前自己可是读了好几遍书都没有彻底领悟。跟着杨述老师的串讲视频把PMP所有知识点了解一遍,在脑海中初步形成知识体系架构,为之后展开深入的学习打下坚固的基础。最初接触那本厚厚的PMBOK的时候,大多数人都会觉得看不懂,感觉书中的文字表达晦涩难懂。那么这时候,最好的办法就是先观看串讲视频,再结合书本去理解知识点,包你事半功倍。 时间过的很快,转眼间到了模拟冲刺阶段。在这个阶段,最重要的就是跟上老师和大部队的节奏,按时完成模拟与冲刺题,认真复盘,总结考点,查漏补缺。每个考题都有张立台老师的详细讲解,教我们学会分析考点,以及如何从答案中选择最好最适用的选项。在班级微信群中还有往届成绩5A的学长分享经验。班级中也不乏态度的积极的小伙伴,主动总结知识点分享给大家,使大家的学习效率猛增。 在整个PMP学习、备考、冲刺阶段,光环的班主任老师们都会定时通过电话、微信等渠道敦促学习进度,指导学习方向,关怀备至。所以,只要按部就班的跟着进度,压力不会很大,因为所有的学习内容和学习时间都是经过光环的老师们精心设计的最佳实践。 2019年6月22日,这一天终于到来,我选择的是北京外国语大学的考点,这里还要感谢一下我的家人,提前一天带我踩点,考试当天负责接送,在整个备考过程中即使牺牲了一些陪伴家人的时间,都得到了理解与大力支持。整个考试过程还算顺利,只是在把控时间方面做的有所不足,只提前了10分钟才做完,有点惊险。这里提醒备考的小伙伴,在做模拟题冲刺题的时候,一定要模拟一次真实考试时间,即使模拟题有暂停按钮,也要强迫自己不去暂停,这样可以给自己一个真实的评估。这点我承认在备考阶段做的不太好,“充分”利用了暂停按钮,导致正式考试的时候险些没有做完。 经过一个多月漫长的等待,功夫不负有心人,最终以5A的成绩通过考试,成功取得PMP证书,为我的职业转型开了好头,并使自己更加有信心在项目经理这个岗位上继续发展。真心的感谢光环国际专业的培训课程与讲师,认真负责的班主任,一起备考的小伙伴还有自己亲爱的家人们。军功章有你们的一半!

opencv两个图像相减_图像处理知识梳理

5G即将商用,带宽提速,未来必将加快依赖宽带传输的图像和视频应用的产品市场化、普及化。 个人认为,图像和视频的分析和处理是人工智能几大基础理论支撑之一,项目中有些应用,但已经有好几年没有加强理论了,以下简单梳理和整理图像处理相关的基础知识,以备忘。 一、工具 很多,JAVA\C\C++\PYTHON等,可以使用python+opencv+pycharm,快速入门 二、图像的基本属性 通道、像素值、尺寸、位图深度 图像是视频某一时刻的某一帧 三、图像处理 1、颜色空间模型,比如RGB\HSV\YUV等。opencv处理是经常转换为HSV,HUE(色彩)、saturation(饱和度) 、value(值) 2、inrange通道分离和合并,用于对单一颜色物体的跟踪,见像素范围表 3、图像叠加cv.add、cv.substract、divide、multipl(加减乘除),平均mean、逻辑运算(与或非)、方差(分析无效图像)、标准差 4、RIO和泛洪填充,取矩阵像素一定范围替换填充 5、卷积,去噪,中值模糊去椒盐噪声、高斯模糊去高斯噪声、均值模糊、自定义模糊,锐化让图像更加清晰立体 6、 边缘保留滤波,用于美颜,EPF 7、图像直方图,可以应用与相同或相似图像查找,直方图反向投影 8、模板匹配,,用于将图中感兴趣区域找到 9、图像二值化:黑白两种,0黑色255白色,用于计算机识别中提高识别效率。超大图像二值化,分块、局部二值化更好 10、图像金字塔(降低分辨率、更容易存储和显示) 11、图像梯度(像素相减,用于边缘提取),一阶导数soble算子、二阶导数拉普拉斯算子,边缘提取canny 12、直线检测、圆检测(霍夫变换) 13、轮廓发现、对象测量 14、膨胀Dilate(减少或填充弱连接)与腐蚀Erode(分割或弱化连接) 15、开操作(去除小干扰块)闭操作(填充闭合区域),提取水平竖直线 16、黑帽、顶帽、图形学梯度,素描效果 17、基于分水岭的图像分割,Kmeans\高斯混合模型GMM等 以上都是基础知识(见下脑图),实际应用会有大量综合以上基础理论的成熟方法和算法,待续

CNN+LSTM 的模型结合(keras代码实现)

CNN-LSTM模型 运行环境:python3.6.5 、Keras 2.1.5 、tensorflow 2.3.1等 CNN-LSTM的Sequential()写法: from keras.models import Sequential from keras.layers import Dense, Dropout, Activation from keras.layers import Convolution1D, MaxPooling1D from keras.layers import LSTM #模型参数 time_step=100 # Convolution 卷积 filter_length = 5 # 滤波器长度 nb_filter = 64 # 滤波器个数 pool_length = 4 # 池化长度 # LSTM lstm_output_size = 70 # LSTM 层输出尺寸 # Training 训练参数 batch_size = 30 # 批数据量大小 nb_epoch = 2 # 迭代次数 # 构建模型 model = Sequential() model.

numpy读取txt_Numpy库学习笔记2-Numpy数据存储与函数

阿迪:Numpy库学习笔记1-Numpy库入门​zhuanlan.zhihu.com CSV文件 Comma-Separated Value,逗号分隔值 CSV是一种文件格式,用来存储批量数据 文件格式如下:(逗号为英文输入法下,) 向Excel中导入CSV文件 将数据写入csv文件的方法 np.savetxt(frame, array, fmt="%.18e", delimiter=',') frame:文件、字符串或产生器,可以是.gz或.bz2的压缩文件array:存入文件的数组fmt:写入文件的格式delimiter:分割字符串,默认是任何空格,如CSV文件,需改为',' In [1]: import numpy as np In [2]: a=np.arange(100).reshape(5,20) In [3]: np.savetxt('C:Users阿迪Desktopa.csv.txt',a,fmt='%d',delimiter=',') 将CSV文件中的数据读入到一个numpy中的数组类型中 np.loadtxt(frame,dtype=np.float,delimiter=None,unpack=False) frame:文件、字符串或产生器,可以是.gz或.bz2的压缩文件dtype:数据类型delimiter:分割字符串,默认是任何空格unpack:如果True,读入属性将分别写入不同变量 In [5]: b=np.loadtxt('C:Users阿迪Desktopa.csv.txt',delimiter ...: =',') In [6]: b Out[6]: array([[ 0., 1., 2., 3., 4., 5., 6., 7., 8., 9., 10., 11., 12., 13., 14., 15., 16., 17., 18., 19.], [20., 21., 22., 23., 24., 25., 26., 27., 28., 29., 30., 31.

极化SAR图像特征提取与分类方法研究

极化SAR (多极化SAR、全极化SAR)是一种多通道相干微波成像系统,是单极化SAR的扩展系统。它通过矢量测量方法来获取地物目标信息。众所周知,电磁波是一一种矢量波,它除了包含幅度、相位、频率等分量外,还应包括极化分量,极化用于描述电磁波电场矢量末端的振荡方式。单极化SAR只能收发固定极化方式的电磁波,因而不能记录在不同极化方式下的散射回波信号。极化SAR通常收/发水平极化与垂直极化的电磁波,采用交替发射与同时接收的方式来获取四种散射回波信号,这四种信号结合极化合成技术可以产生在任意极化方式下的散射回波信号,因此极化SAR能记录目标散射回波的全极化信息,可以用于分析地物目标的散射机制8。相比于单极化SAR,极化SAR具有诸多优势:能获取丰富的目标信息,可以分析目标散射机制,能避免目标信息的不确定性问题,能增强杂波抑制与抗干扰能力等。 相比于非极化雷达,极化SAR的最大优势在于能获取目标极化信息,进而能分析目标散射机制。 注:文章选自《极化SAR图像帖子更提取与分类方法研究》 博士论文 刘高峰

Android百度地图导航开发:Androidstudio导入aar包,解决新版本百度地图SDK没有com.baidu.navisdk.adapter及类BaiduNaviManagerFactory

1.错误 按照百度地图官方文档初始化导航时,android studio报错:找不到BaiduNaviManagerFactory。 2.解决办法 点击 右下的“相关下载” ,然后去下载 点击 “ARR下载” ,选择 “驾车导航” ,点击下载“开发包” 下载完成后,解压 点击解压完成的开发包,找到“NaviTts.aar” 和“onsdk_all.aar” ,将这两个文件复制到项目中的app/libs目录下 在app的build.gradle里添加如下代码在这里插入代码片 repositories { ... flatDir { dirs 'libs' } } 以及 dependencies { ... implementation (name: 'onsdk_all', ext:'aar') implementation (name: 'NaviTts', ext:'aar')//如果没用内置导航tts,就把这个注释掉 } Sync Project sync后,在External Libraries 里面会出现如下两个Gradle文件夹: 3.完成 所要的navisdk以及一些必要的依赖就出来了。导入BaiduNaviManagerFactory这些类也不会报错了 参考文章 https://blog.csdn.net/weixin_43562948/article/details/104808012https://liuchenyang0515.blog.csdn.net/article/details/80541545?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-3.control&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-3.control

数据结构作业5重难点复习

一、判断题 1-1 反了 1-2 链表是链式存储结构,表中元素的地址不一定连续 1-3 O(n)或O(m) 看你把谁连在后面 二、选择题 带头结点的单链表,头结点是固定存在的,其next域指向链表的第一个元素,如果next域为空,说明链表中没有元素,即为空。 前一链表的最大元素也比后一链表的最小元素小 其他三项均为链表的特点 遍历长度为m的链表找到其为元素,时间复杂度为O(m) 注意与带头结点的相比较 2-18 可以用带表头附加结点的链表表示线性表,也可以用不带头结点的链表表示线性表,前者最主要的好处是(B)。(2分) A.可以加快对表的遍历 B.使空表和非空表的处理统一 C.节省存储空间 D.可以提高存取表元素的速度 三、编程题 6-2 单链表元素定位 (12分) 本题要求在链表中查找第一个数据域取值为x的节点,返回节点的位序。L是一个带头结点的单链表,函数ListLocate_L(LinkList L, ElemType x)要求在链表中查找第一个数据域取值为x的节点,返回其位序(从1开始),查找不到则返回0。例如,原单链表各个元素节点的元素依次为1,2,3,4,则ListLocate_L(L, 1)返回1,ListLocate_L(L, 3)返回3,而ListLocate_L(L, 100)返回0。 函数接口定义: int ListLocate_L(LinkList L, ElemType x); 其中 L 是一个带头节点的单链表。 x 是一个给定的值。函数须在链表中查找第一个数据域取值为x的节点。若找到则返回其位序(从1开始),找不到则返回0。 裁判测试程序样例: //库函数头文件包含 #include<stdio.h> #include<malloc.h> #include<stdlib.h> //函数状态码定义 #define TRUE 1 #define FALSE 0 #define OK 1 #define ERROR 0 #define INFEASIBLE -1 #define OVERFLOW -2 typedef int Status; typedef int ElemType; //假设线性表中的元素均为整型 typedef struct LNode { ElemType data; struct LNode *next; }LNode,*LinkList; Status ListCreate_L(LinkList &L,int n) { LNode *rearPtr,*curPtr; //一个尾指针,一个指向新节点的指针 L=(LNode*)malloc(sizeof (LNode)); if(!

为什么那么多人博客不更新不写了人也找不到了?

前几年年轻的时候,经常遇到问题上网搜,csdn啊,博客园啊啥的,发现一个现象,很多人博客都是前几年更新很多,后边好多年都不更新了, 现在我渐渐明白为啥: 一开始一腔热血,愣头青,后来经历社会毒打,谁特么还愿意无偿费时费劲写文章? 我这破博客阅读量那么大,一分钱也没得,我还那么多事情,干嘛还费这个事白用功?》 或者有的人干几年程序员,转行了,回老家了,干不动了,不弄代码了,或者当管理了,只顾着开会扯皮勾心斗角了 或者就是老了,没那么多倾诉欲了,就沉默了

华为云计算——FusionCompute单节点部署详细安装教程(一)CNA主机的安装

1. 实验准备: (1)因为实验所需的CNA,VRM,操作系统IOS的压缩包比较大,需要提前将实验所需要的下载到本地电脑中。工程中需要在U盘中备份,用兼容性较高的电脑进行操作,例如ThinkPad。 安装包在华为官网上都有,位置官网->解决方案&服务->企业用户下的软件下载->按产品查找 云计算->FusionCompute。具体版本这里采用的是 FusionCompute V100R006C10SPC101_XXX 在这里提供一个链接: 之前为了方便直接贴上了官方的下载地址,后来可能因为官方名字的改动,链接不到对应的位置,还好原来的安装包都在电脑里,索性上传到百度云,需要的请自行下载 链接:https://pan.baidu.com/s/1XohF5RkMx-Qgh0d9y-cviA 提取码:b84m 此次试验采用的是Dell的服务器,默认用户名:root,默认密码:calvin 2. 实验环境配置: (1)因实验需要,下载并安装火狐浏览器。 (2)在官网下载jdk7版本并安装(建议),进行Java环境配置,在Java安全中添加例外站点,配置如下: http://192.168.0.120 https://192.168.0.120/index.html(Dell服务器的默认管理地址) (3)笔记本禁用所有网络连接,只留一个网线的本地网口,并将本地IP设置为192.168.0.x(2~253) (4)关闭防火墙,防毒墙,和安全管理软件(电脑管家,360等) 3. 试验实施: 安装CNA (1)服务器接通电源,笔记本用网线直连服务器的控制口(远程口) (2)打开火狐浏览器,输入服务器的管理地址https://192.168.0.120/,可能会出现不安全连接,添加例外站点,继续连接就可以了。 (3)点击提交,登录进去后找到电源选项开机(软件方式开机),也可以通过硬件方式开机(直接找到服务器的电源按钮)确认开机完成后继续进行后续操作。 (4)启动虚拟控制台(启动过程中如果出现Java异常,调整Java的安全级别,在控制面板里),打开虚拟介质,挂载CNA的iOS镜像文件,记得勾选镜像文件,添加映像(在这里犯过很多次错,记得非常清楚QAQ) (5)在虚拟控制台界面->电源->温引导重启(冷引导也行),待时机按F11进入BIOS模式,选择CD启动,install。 (6)对CNA主机进行配置 配置主机信息,IP地址(192.168.10.80),子网掩码,网关,密码(本次实验设为Huawei@123),权限设为1,修改主机名CNA_02(按自己的命名规则) (7)等待安装 (8)在虚拟控制台尝试对CNA主机的登录,用户名root,密码:Huawei@123,登录成功

pytorch对CIFAR10图片分类

pytorch官网的教程 https://pytorch.org/tutorials/beginner/blitz/cifar10_tutorial.html 导入cifar10数据集 import torch import torchvision import torchvision.transforms as transforms transform = transforms.Compose( [transforms.ToTensor(), #转为tensor transforms.Normalize((0.5, 0.5, 0.5), (0.5, 0.5, 0.5))#归一化 ]) #训练集 trainset = torchvision.datasets.CIFAR10(root='./data', train=True, download=True, transform=transform) # 训练数据加载器 trainloader = torch.utils.data.DataLoader(trainset, batch_size=4, shuffle=True, num_workers=2) #测试集 testset = torchvision.datasets.CIFAR10(root='./data', train=False, download=True, transform=transform) # 测试数据加载器 testloader = torch.utils.data.DataLoader(testset, batch_size=4, shuffle=False, num_workers=2) # cifar10 分类索引 classes = ('plane', 'car', 'bird', 'cat', 'deer', 'dog', 'frog', 'horse', 'ship', 'truck') CIFAR-10中的图像尺寸为3×32×32,即尺寸为32×32像素的3通道彩色图像

ReflectionException: There is no getter for property named ‘XXX异常原因和解决

异常出现原因 在使用通用mapper时所有的数据映射和修改都是根据你所创建的实体类中的get和set方法。 而出现这种异常的情况,大多数就是在你使用实体类对象来接受前端封装传回数据后,对数据在传入数据库时进行操作导致的。 此处就是利用实体对象接受的前端数据 以下是实体类的属性 而在对数据库进行操作时如果我们如下图所示 此时就会发生异常 异常的解决 出现这种异常那的根本原因就是,在对数据库操作时,执行sql语句的时候,程序无法找到要注入的属性在哪里,比如实体对象中的是videoName,而在操作时xml文件中的sql语句写的是 video_name = #{videoname} 此时程序无法找到videoname到底来自哪里,他的值是什么,因为我们在xml中的参数为 parameterType=“com.cn.fate.Bean.VideoInfo” 是一个实体类,但是这个实体中没有videoname属性,所以出现这种异常,所以此处所有参数应该写成实体类中的属性,且要和实体类中属性的名称保持一致。 正确图片如下 总结 保证sql语句中的参数和实体参数的属性名称一样即可解决该问题

Moravec算子实现(C++)

Moravec算子实现(C++) 一、Moravec算子原理二、实现代码三、结果及分析 一、Moravec算子原理 考虑某一点与周围像素间的灰度差,以四个方向上具有最小最大灰度方差的点作为特征点。 ① 计算各像元的兴趣值IV(Interest Value) ② k值计算(w是窗口大小)及各个方向兴趣值计算 取四个方向中的最小者作为该像元的兴趣值: ③ 给定一经验阈值,将兴趣值大于阈值的点作为候选点 ④ 选取候选点中的极值点作为特征点 在一定大小的窗口内,将候选点中兴趣值不是最大者均去掉,仅留下一个兴趣值最大者,该像素即为一个特征点 “抑制局部非最大” 二、实现代码 这是我根据Moravec算子原理写的代码,没有用到opencv里面的库函数,因此在各个方面(无论是运行效率还是效果)都感觉有些欠缺,欢迎批评指正。 #include "gdal_priv.h" #include "cpl_conv.h" #include <iostream> #include <opencv2/highgui/highgui.hpp> #include <opencv2/opencv.hpp> #include<cmath> #include <string> #include <vector> using namespace std; using namespace cv; //main(int argc, char *argv[ ], char **env)才是UNIX和Linux中的标准写法。 int main(int argc, char** argv) { void Moravec(Mat image); //将所有需要的库函数等,导入进来并改变位数为X64 //包括VC++目录,C/C++常规、连接器常规等,不同的库路径不同,引入的位置也不同 string filename = "G:/myself/Major/MathPhotograph/Experiment/Picture02.jpg";//斜杠的方向不能反 //argc: 整数, 用来统计你运行程序时送给main函数的命令行参数的个数 //* argv[ ]: 指针数组,用来存放指向字符串参数的指针,每一个元素指向一个参数 //cout << filename << std::endl; //测试语句 if (argc > 1) //如果参数比1大的话,就把第一个参数赋值给filename { filename = argv[1]; //将参数赋值给filename //cout <<"

下载bert的预训练模型并加载训练

总结 使用 huggingface下载预训练好的bert模型,并加载。文章来源:csdn:LawsonAbs文章写于[20201205] 1.具体步骤 step1.进入网址 https://huggingface.co 搜索自己需要的模型名(下面以bert-base-uncased 为例)step2.在如下的界面中,找到一个 Files and versions step3. 进入如下的界面,(这里以下载pytorch版的模型为例) 下载如下三个红框中的内容即可。 step4.具体使用 我将上述下载好的内容放到了 /home/lawson/pretrain/bert-base-uncased 文件夹下。那么我就可以在程序中这么用: import torch as t from transformers import BertTokenizer,BertModel str = "I used to be a bank, but I lose interest." tokenzier = BertTokenizer.from_pretrained("/home/lawson/pretrain/bert-base-uncased") bert = BertModel.from_pretrained("/home/lawson/pretrain/bert-base-uncased") 2.文件释义 2.1 模型文件 pytorch_model.bin 就是一个pytorch版的模型文件,同样可以在链接中下载tensorflow,或者是rust的模型文件。 2.2 配置文件 config.json 是预训练模型的配置文件,内容如下所示: 3.其它问题 可能有的时候加载训练好的模型会报错,明明操作是对的,但是就是报错,常见的错误有:OSError: Couldn't reach server at '/home/lawson/pretrain/.... to download configuration...',如下所示: 这种情况的出现是因为 config.json 这个文件中的内容是错误的,导致程序无法识别,删除掉重新下载就好了。【这种情况常出现在网络不佳时下载文件导致】

python中的ix是啥_pandas中ix的使用详细讲解

在上一篇博客中,我们已经仔细讲解了iloc和loc,只是简单了提到了ix。这是因为相比于前2者,ix更复杂,也更让人迷惑。 因此,本篇博客通过例子的解释试图来描述清楚ix,尤其是与iloc和loc的联系。 首先,再次介绍这三种方法的概述: loc gets rows (or columns) with particular labels from the index. loc从索引中获取具有特定标签的行(或列)。 iloc gets rows (or columns) at particular positions in the index (so it only takes integers). iloc在索引中的特定位置获取行(或列)(因此它只接受整数)。 ix usually tries to behave like loc but falls back to behaving like iloc if a label is not present in the index. ix通常会尝试像loc一样行为,但如果索引中不存在标签,则会退回到像iloc一样的行为。(这句话有些绕口,没关系,关于ix特点,后面会详细讲解) 1 使用ix切分Series 请注意:在pandas版本0.20.0及其以后版本中,ix已经不被推荐使用,建议采用iloc和loc实现ix。这是为什么呢?这是由于ix的复杂特点可能使ix使用起来有些棘手: 如果索引是整数类型,则ix将仅使用基于标签的索引,而不会回退到基于位置的索引。如果标签不在索引中,则会引发错误。 如果索引不仅包含整数,则给定一个整数,ix将立即使用基于位置的索引而不是基于标签的索引。但是,如果ix被赋予另一种类型(例如字符串),则它可以使用基于标签的索引。 接下来举例说明这2个特点。 1.1 特点1举例 >>> s = pd.Series(np.nan, index=[49,48,47,46,45, 1, 2, 3, 4, 5])

python爬取所有页url_Python 如何爬取相同url下,多个页面的链接内容

据说,python是方便抓取网页数据。今天让我们试试。它有多方便的对于python来抓取数据。介绍抓取数据,基本上得到这个网页的源代码通过网页的URL,并过滤出所需的信息根据源代码。准备IDE: pyCharm库:请求,\u2026进口lxml进口etree #链接url = ' http:\/\/www ' #循环得到分页我范围内(26):#找到关键字查询的页面数量={\u201C页面\u201D:\u201C我\u201D}data =(查询)....\u201C\u2018python导入请求fake_useragent进口UserAgent #随机ua library类无聊():def __init__(自我,page_scope = (4、7)):\u201C\u201C: param page_scope:页码范围\u201D\u201C_scope =爸爸\u2026\u2026Python如何爬下多个页面的链接内容相同的url,最好附加代码,我不能打开下一页通过得到下一个页面的url爬行通过Python,所以它是没有不同于爬行第一页。 起初我以为使用正则表达式来匹配每一页\u2026\u2026进口url = \具体要求:python爬行web表数据具有相同的url跳转页面。url:爬行\u2026\u2026读了很多关于python的引入爬行的图片,和相关的验证代码,首先推荐几个好的履带过程:[1]Xiaobai爬虫爬行女孩的第一枪(这个博客的过程是非常详细的)[2]python crawler-crawling妹妹照片(静态图像爬行)[3\u20260。从新闻url获得点击的数量\u2026\u2026newsUrl newsId clickUrl (()) (()) (clickUrl) () () () () int被组织成一个函数来获取新闻发布时间和类型转换也组织成一个函数\u2026写一个履带在Python中抓取微博的微博内容大诉一般来说,不同的页码最后一页=或p,等等,你只需要把相应的值,或者找到最后一页的URL对应于最后一页的页面总数。 \/usr\/bin\/env python # - * -编码:utf - 8 - * -进口pymysql #进口\u2026最近我学会了使用python来抓取数据,考虑python信息在网站上爬来爬去,分类。从bs4进口BeautifulSoup进口进口请求重新def FindoutMaxPageNumber (): max = 1我最近学习python和发现它很方便通过python抓取网页信息。我曾经用c++编写一个简单的爬虫抓取的信息指定的web页面。任意需要几百行代码编写,代码的数量是非常小的用python来完成相同的工作。我看到一个博客解释如何使用它几天前\u2026\u2026最近,我有一些想法,我只是想建立一个小说网站(不要笑,只是用它来练习,我恐怕会忘记后很长一段时间没有爬行)。 2. 使用python库:再保险,bs4(自己安装没有这个环境)3。数\u2026\u2026原理也很简单,html链接都是一个元素,我们只匹配的所有元素,当然,可以是一个空链接,没有空链接,或一个无效的链接。我们测试的有效性urllib通过请求的链接库。无效的链接时,将抛出一个异常,\u2026\u2026如果你想使用它,有很多方法,如:过滤页面类型,数据重复数据删除技术,多线程,批量抓取多个网站,等。#编码:utf - 8 # Web页面url收集爬虫,给定一个url,并存储文件,收集所有Web页面的url,您可以指定文件存储方法\u2026\u2026爬虫从一个或多个初始web页面的URL初始网页的URL,爬行网页的过程中,不断从当前页面提取新的URL并使他们在队列中,直到一个特定的系统满足停止条件。 第一步是确定URL。第二步是获得html文档。第三步是分析信息。第四步是打印信息。简单的Python爬行淘宝产品路线使用Pyhton爬淘宝产品。爬行的技术路线是:请求-\u2026PYTHON爬高德牌POI地图。使用高德牌爬POI数据地图API,您首先需要申请高德牌地图API的关键。并获得\u201CPOI分类表和代码\u201D,这个例子的最后结果是生成多个EXCEL表数据根据不同的POI类型。表的字段包括:经度、纬度、和收购的数量\u2026\u2026安全测试,当面对一个大型网站,手工测试可能是不完整的。在这个时候,一个通用的网站扫描仪是非常必要的。当然,也有很多工具可以直接扫描漏洞,但你只能被视为一种工具的用户,和你还是远离安全测试\u2026\u2026使用python爬贴吧的数据,有时去贴吧,读故事,看着别人谈论它。 没有排序的功能回复量(实验功能不可用!),ಥ_ಥ\u2026\u2026这促使我写一个python爬虫爬帖子的点击量超过一定的阈值。最近新闻网站爬的标题和新闻页面的链接仍然可用。我用BS4和再保险。当处理web页面的URL是爬,我选择把它放在Quene并调用它。事实上,它可以放在()或保存为txt。常规不是太66,所以常规的一部分似乎\u2026\u2026我需要爬每个公司的详细的信息在这个网站上。我的想法是爬行url的所有细节页面通过这个主页,然后打开详细信息页面(公司详细信息页面)所需的数据。我现在面临的问题是,URL不会改变页面时。在互联网上\u2026\u2026

python 映射表_python-将列表元素映射到另一个列表中的索...

我正在比较Python中的两个列表. list1是list2的超集. 对于list1的元素,我想要它们在list2中的索引(如果存在). 这是两个例子. list1 = ['a','b','c','d'] list2 = ['a','b'] 该解决方案应产生[0,1]. list1 = ['a','b','c','d'] list2 = ['b','a'] 解决方案应产生[1,0]. 我尝试了以下代码,但仅适用于第一个示例. list1 = ['a','b','c','d'] list2 = ['a','b'] pairwise = zip(list1,list2) matched_index = [idx for idx, pair in enumerate(pairwise) if pair[0] == pair[1]] 这可行.但是,对于第二组样本数据,我得到了错误的输出[]而不是预期的输出[1,0]. list1 = ['a','b','c','d'] list2 = ['b','a'] pairwise = zip (list1,list2) matched_index = [idx for idx, pair in enumerate(pairwise) if pair[0] == pair[1]] print(matched_index) # prints [] 请提出前进的方向.

git fork操作

Git fork操作 文章目录 Git fork操作一.背景二.概念1.与git clone的区别?2.用法流程 三.实操1. fork仓库2. 分支创建与提交 一.背景 最近我在github上发现一个很有意思的项目,看了其中相关的源码,而我呢,又很想加入其中,成为这开源项目的贡献者,而我又不可能让项目的作者给我分配一个开发者的权限,所以,这里就用到了 fork这个操作 二.概念 fork 是github上的操作,使用fork功能会在github上,给你创建一个与该项目一样的同名项目。其实就是复制该项目,包括其中的文件,提交的历史,issue,和其他的一些内容,复制后的仓库存放于你自己的github账号下 1.与git clone的区别? 有人说,直接把项目拉下来,git clone 不就行了,何必还多此一举,fork一下?请注意,这里操作是跟所处环境不一样的,平常我们在公司开发,可以不用管fork这一步,因为创建这个项目的人,已经把开发权限都给我们了,我们只需要 git clone 下来,然后 push 代码即可。但是,我们如果没有给到我们开发权限,是无法进行push的。而我们又要开发,就需要用到fork这一步 git clone: git命令,将github仓库中的项目克隆到本地电脑中 fork:github网站的操作,将开源项目复制一份到我们github账号下,自己的仓库中 2.用法流程 这里引用一下,网络上的配图流程 1.fork一下Joe的github的仓库地址,到我们自己的github仓库下2.git clone到本地电脑中3.我们做一些代码的修改4.本地进行commit5.push到我们自己的仓库中6.发起Pull request 如果对方接受了我们的pull request,那么我们做的一些修改,就可以合入到他的仓库中了,整个流程就走完了。 三.实操 以ElementUI为例,我们想为ElementUI共享自己的代码,可以试试以下操作 1. fork仓库 1.打开element的代码库,github地址 https://github.com/ElemeFE/element 2.点击右边的Fork 按钮 3.这时会发现我们github自己的账号下,多了一个element的项目,并且有备注:forked from ElemeFE/element 4.接下来,我们fork下来的仓库就在我们自己账号下了,使用方法和自己的仓库一样,git clone到本地 5.关联上游仓库,可以保证后面可以同步上游仓库的代码 相关参考文档 关联上游 git remote add upstream https://github.com/ElemeFE/element.git 验证 $ git remote -v > origin https://github.com/YOUR_USERNAME/YOUR_FORK.git (fetch) > origin https://github.com/YOUR_USERNAME/YOUR_FORK.git (push) > upstream https://github.

修改yum源为国内源

修改为阿里源 首先是到yum源设置文件夹里: /etc/yum.repos.d/ 1. 查看yum源信息: yum repolist 2. 安装base reop源 cd /etc/yum.repos.d 3. 接着备份旧的配置文件 sudo mv CentOS-Base.repo CentOS-Base.repo.bak 4. 下载阿里源的文件 sudo wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo 5.清理缓存 yum clean all 6.重新生成缓存 yum makecache 7. 再次查看yum源信息 yum repolist 8. 安装 yum -y update 修改为网易163源 1.前期文件准备 前提条件linux系统必须可以联网在Linux环境中访问该网络地址:http://mirrors.163.com/.help/centos.html,在使用说明中点击CentOS7->再点击保存,如下图所示 2.替换本地yum文件 (1)把下载的文件移动到/etc/yum.repos.d/目录 [root@hcmaster 下载]# mv CentOS7-Base-163.repo /etc/yum.repos.d/ (2)进入到/etc/yum.repos.d/目录 [root@hcmaster yum.repos.d]# pwd /etc/yum.repos.d (3)用CentOS7-Base-163.repo替换CentOS-Base.repo [root@hcmaster yum.repos.d]# mv CentOS7-Base-163.repo CentOS-Base.repo 3.安装命令 (1)[root@hcmaster yum.repos.d]#yum clean all (2)[root@hcmaster yum.repos.d]#yum makecache

python3.6同一目录下 py文件的调用,两种方法

方法二:自己亲测有效: 如下图所示,testwork001文件下面的 左侧的:红色圈出框的py文件,想调用绿色框的py 右侧的:展示了一种错误写法 与正确写法 import get_timeNowtest ### 这是错误写法,会一直爆红 import testWork001 as net # 下面这两行是正确写法 PyCharm工程当前目录在上一层,所以需要从目录开始引用 ,同一目录下的引用 from testWork001.get_timeNowtest import get_timeNow 方法一:别人亲测有效 问题描述: 如图:同目录下明明存在相应文件,在导入时却出现带有红色波浪线,说没有相应的模块,但是确实有random_walk文件 解决方法: 在当前文件下,右键找到mark Directory as(鼠标放在文件夹上,右键!!!) 然后选择source root,完工ok 再如图: 方法一 转自:https://blog.csdn.net/l8947943/article/details/79874180

cannot open shared object file: No such file or directory 加载库失败的原因及解决

cannot open shared object file: No such file or directory 加载库失败的原因及解决 1. 找不到链接库 程序运行时,假如没有在代码里指定库路径,则库链接路径由 LD_LIBRARY_PATH 环境变量指定 export LD_LIBRARY_PATH=库路径:$LD_LIBRARY_PATH 如果系统内有多个同名库文件,而且LD_LIBRARY_PATH 都指定了这些路径,则会优先使用第一个路径下的库。 如果一个路径下没有该库,则会自动寻找下个路径,如果都没找到,就会报 "cannot open shared object file: No such file or directory"啦。 2. 库文件本身问题 假如是我们自己写的动态库,其实还有一种情况也会导致报“cannot open shared object file”, 那就是库本身有问题,这种问题一般是库的某个“symbol” 即符号没找到。 那这时不应该报 “undefine symbol xxx”的错吗。为什么会报"cannot open shared object file: No such file or directory",笔者猜测可能是链接器认为这个库有问题,便去找下一个库,直到没有找到,所以报没有这样的文件或目录这个报错。 2.1 调试库缺少某个符号的方法 加载库时,指定库的绝对路径,这样连接器就不会去找其他库 QLibrary lib("/mnt/mywork/" + strLibName); 这时程序运行时会报告该库缺少的符号 自己写动态库时,假如某个函数声明了却没有实现,动态库是能编译通过的,所以一不小心就会经常出问题。

SpringBoot中搭建thymeleaf网页遇到Cannot resolve MVC View ‘###‘的问题

原因是配置文件pom.xml中thymeleaf版本与springBoot版本有冲突 要引入的thymeleaf依赖是这个: <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-thymeleaf</artifactId> </dependency> 并且声明版本: <properties> <java.version>1.8</java.version> <thymeleaf.version>3.0.11.RELEASE</thymeleaf.version> <thymeleaf-layout-dialect.version>2.2.2</thymeleaf-layout-dialect.version> </properties>

IEAD无法修改maven home directory问题

Idea 2020.2版本之后,无法设置maven home directory为自定义的地址(设置之后每次打开设置还是原来的地址),如果想设置为自己的地址,可以将.mvn/wrapper/maven-wrapper.properties删掉,之后就能设置为自己的地址。

超越阿里达摩院成绩,这个斯坦福团队用“国产求解器”助中国企业实现智能决策|快公司...

关注ITValue,看企业级最新鲜、最价值报道! “高性能科学计算软件的开发,一直是工业界和学术界关怀的问题,MindOpt的单纯形求解算法排名榜首,是中国企业近些年来在优化计算软件范畴获得的重要成功之一。”中科院数学与系统科学研究院研究员戴彧虹评价道。 今年8月,阿里巴巴达摩院宣布,该团队研发的数学规划求解器MindOpt参加国际权威的Mittelmann榜单测评,成功求解出了测评中全部40个线性规划问题,以快于第二名10%的速度优势,在单纯形法测评中排名第一。 数学规划,也就是将复杂的现实问题建模成数学问题,并用数学方法进行求解的过程。在人们常说的智能决策之中,“智能”引擎的其中一个就是数学规划,而求解器则是求解数学规划问题的软件。 求解器的技术壁垒高、研发难度大,国外已经出现了不少成功商业化的求解器团队,中国具备研发能力的团队屈指可数,无论是规模还是技术都与国外求解器有一定的差距。受美方的禁令波及,中国制造产业也正在寻找“国产替代”。因此,这一次达摩院成功登顶,在中国科技圈引起不小的震动。 不过有趣的是,没到两个月,由美国亚利桑那州立大学汉斯·米特尔曼(Hans Mittelmann)教授维护的这一权威榜单,悄悄更换了多个规模更大更困难的测评问题,并对多个求解器进行更新,竞争一直呈白热化状态。 截止最新11月2日,MindOpt在Simplex LP(线性)求解器榜单中排第三,被另一家中国初创企业——杉数科技(北京)有限公司(以下简称杉数科技)研发的“COPT数学优化求解器”所超越,后者已持续位列该榜单前三近一年半时间,其中绝大部分时间名列榜首。 求解器榜单最新排名情况 值得注意的是,“COPT数学优化求解器”不止在线性规划单纯形法技术领域,而且在线性规划内点法(Barrier Method)求解器、大型网络优化基准测试两个细分榜单中均排在前三,这两项MindOpt并不在榜单当中。 这项求解器技术是一家创业团队——杉数科技的核心技术产品。杉数科技也正在摸索将这项技术商业化,用在人工智能决策领域,帮助企业在复杂问题中获得最优解。 11月18日,杉数科技宣布完成近亿元B轮融资,引入万科集团及天任投资两个重要战略股东,资金将主要用于产品研发与推广、团队建设等。 在此之前,该公司也获得了真格基金、北极光创投、联想创投、将门创投等知名基金的投资。 杉数科技联合创始人&CSO、斯坦福大学运筹学博士、上海财经大学教授葛冬冬告诉钛媒体App,在他看来,工业4.0和互联网时代依靠AI技术帮助企业进行相关决策是大势所趋。杉数科技利用“求解器”和机器学习引擎,以“企业决策大脑”优化中台为支撑,可帮助客户(企业)在各种复杂问题下完成最优决策,而这也是目前很多公司发展过程中的迫切需要。 “COPT数学优化求解器”: 帮助企业拥有智慧决策大脑 对于数学规划求解器来说,它的底层技术是应用数学中的运筹学。 运筹学是近代应用数学的一个分支,主要是研究如何将生产、管理等事件中出现的运筹问题加以提炼,然后利用数学方法解决问题的学科。而在运筹学里,对于数学规划求解器的定义是,针对多种已经建立的线性、整数及各种非线性规划模型,进行大量计算,寻求出最优解决方案。 由于整个算法优化求解过程可以看作是一个“黑盒子”引擎,因此,求解器也被业界称为算法上的“芯片”。 在求解器诞生之前,这一步通常是由人工完成——依赖有经验的业界研究员们手动计算模型的最优解。在模型复杂或者数据量庞大的情况下,这个步骤消耗了大量的人力,结果准确性也难以保证。 此后,发展起以一系列庞大算力支撑的启发式算法,不过这种做法往往只能寻求一些可行解决方案,求解质量和时间难以保证。 当下,在世界风云突变的市场环境中,很多企业决策者都是依靠数据简单分析,进而根据经验判断做出企业决策性部署。一旦发生偏差与失误,可能会造成企业处于危机状态。 在这种情况下,如何能更进一步利用数据为企业服务,是行业亟待解决的问题。 杉数科技自研了一套名为“COPT数学优化求解器”算法系统,依托企业提供的过往数据,规划多种已经建立的线性、整数及各种非线性数据模型,并将目标和约束以数学模型的形式进行有效表达,然后通过对这些数学模型进行求解,自动分析出多种决策方案,最终挑选出一套最佳的方案来供企业选择。 以国内某ICT巨头为例,该公司有上千个工厂和供应商,包含原材料和组件在内的零部件共有5万多种,相互以复杂的一个网络拓扑关系出现,材料信息、生产能力、工厂需求等均不相同。在它未来的一个计划生产周期内,需要精确到每个车间要生产哪些东西,要生产多少,每小时要用到哪些零部件,变量和约束大约在5000万至1亿左右,这种体量以及精细的决策需求显然需要算法的介入。 葛冬冬表示,利用“COPT数学优化求解器”,整个过程仅需大约2~3小时。通过这种优化决策,可以使生产排程订单满足率提高20%,产能损失率降低30%,排产排程人工干预降低70%,非计划维修降低15%。 来源:杉数科技官网 除工厂的排程问题外,在连锁商超企业面临扩张计划时,也需要“COPT数学优化求解器”来解决相关复杂问题。 葛冬冬介绍可永辉超市的案例。永辉超市现在在上海已经有300多家店,他们与杉数科技合作,用选址软件做智能选址。 “比如,今年计划开50家店,明年开100家店,后年开150家店,利用‘COPT数学优化求解器’就可以算出这50家店该怎么开、开在哪,明年100家店该怎么开、开在哪,互相之间不会产生恶性竞争。” 简单来说,这些问题的解决,可能需要一个大的动态规划系统来建模,而最后的求解,往往需要“求解器”这样的计算系统来线性规划(LP)、混合整数规划(MIP)逼近正确值,求得最优解。 葛冬冬介绍,“COPT数学优化求解器”的使命,就是让企业拥有“智慧决策大脑”能力,高效地解决一些复杂问题,并得到最优解。 此外,依托“COPT数学优化求解器”衍生的决策模型算法能力,以及物流仓储等场景中的客户需求,杉数科技还自主研发了“杉数智慧链”优化解决方案平台,这是公司的另一产品业务。 杉数科技介绍,该平台利用企业级大数据处理能力、决策模型算法模块以及业务场景解决方案的一站式整合,为企业提供收益管理、库存优化、仓储优化、运输优化、生产制造、网络优化与选址等行业性智能系统解决方案,解决企业所遇到的供应链管理难题。 目前,杉数科技依靠自研的“求解器”以及优化中台,基于供应链产品平台经验,已经在物流、交通、零售、金融以及智能制造等多个领域的的工业场景中推出成熟解决方案,服务的对象也包括苹果、小米、滴滴、京东、永辉、海尔、上汽通用、顺丰等多家头部企业。 自主研发“国产求解器” 打造公司核心竞争力 过去30余年中,世界领先的“商业求解器”一直由欧美三巨头Gurobi、IBM Cplex以及FICO Xpress所垄断,而中国由于研发时间太长、投入资金数额巨大、运筹学人才稀少等诸多原因,一直没有自主研发的国产“商业求解器”。 自2018年起,中美关系紧张,中兴、华为、海康威视等多家中国科技企业先后被美国列入实体清单或被采取打压措施。今年6月初,传出哈工大与哈工程被禁止使用美国MathWorks公司的科学计算工具Matlab事件,让整个软件行业变得人心惶惶。 尽管欧美求解器三巨头依然与中国企业正常来往,但多家在美实体清单中的科技企业都开始寻找国产替代,防止这些软件未来将要通过美方许可审批。且加上国外软件的售后服务欠佳等因素,研发“国产求解器”变得迫在眉睫。 在如今国际竞争环境下,国产求解器已成为中国需要突破的“卡脖子”工程。 葛冬冬认为,求解器是优化产业链与供应链、为复杂生产场景提供智慧决策的“引擎”,也是事关国家基础设施建设能级提升、敏感战略资源调度与部署的核心技术之一。 2016年,葛冬冬联合他在斯坦福读博时的三位同学罗小渠、王子卓、王曦共同成立杉数科技,尝试发展国产商业求解器,避免受制于人,并且将其作为公司最核心的任务和未来的技术支撑。 经过三年的研发、试错、迭代下,2019年,杉数科技正式发布“COPT数学优化求解器”。 与国外顶级求解器相比,杉数科技的“COPT数学优化求解器”也已达到国际第一梯队水平,与顶级商业求解器之间的差距越来越小。 据钛媒体App了解,目前中国也有一些企业通过收购现有的开源求解器,从事国产求解器的研发;而阿里云在今年8月发布MindOpt线性规划求解器;包括北大的国际数学中心,中科院,上海财经大学等高校机构近几年也在做相关研发尝试,不过都未超过“COPT数学优化求解器”的技术水平。 杉数科技现阶段共有100多名员工,其中超70%为技术出身人员。核心团队成员具有丰富的行业实践经验,此前曾为谷歌、IBM、波音、美国能源部等机构解决运营决策优化问题。 杉数科技介绍,自2016年成立至今,公司始终保持着每年翻一番的业绩。2020年在疫情影响下,实际营业收入依然基本实现了翻番的增长。 有行业人士指出,随着中国经济开始进入平稳增长期,各行各业对精细化运营需求提升,对商业优化求解的需求也日益提升。而杉数科技等企业刚好踩在需求点上,随着数据的优势逐步巩固,竞争壁垒将会逐渐提高。 葛冬冬对钛媒体App表示,接下来杉数科技将基于成熟的技术平台、高效率的服务方案和亮眼的头部案例,向下获取客户,快速复制实现业务的规模化增长,一步一步、扎扎实实做技术。 当谈及未来5-10年规划,葛冬冬表示,预期行业内也许将会再出现2-3家企业,杉数科技届时应该预期将达50%左右的份额。 他强调,杉数科技的目标并不是要“占领”市场,更多是与国外的顶级智能决策企业达到同一水平,做求解器行业的“领头羊”。(本文首发钛媒体App,作者 | 林志佳,编辑 | 赵宇航) 无论外界风云变幻,始终坚定 12月,钛媒体全球领袖年会一如既往 2020 T-EDGE 全球创新大会 即将在12月18日-20日 北京大兴星光视界中心隆重开幕 杉数科技联合创始人葛冬冬也将受邀 参加今年的T-EDGE,在现场进行更多精彩分享

IntelliJ IDEA 2020.3发布,年度版本讲武德

仰不愧天,俯不愧人,内不愧心。关注公众号【BAT的乌托邦】,有Spring技术栈、MyBatis、JVM、中间件等小而美的原创专栏供以免费学习。分享、成长,拒绝浅尝辄止。本文已被 https://www.yourbatman.cn 收录。 目录 ✍前言✍正文what’s new(新特性)1、全新的欢迎屏幕2、IDE主题已与操作系统设置同步3、一键进入阅读器模式3、LightEdit模式优化4、改进的拼写检查5、更强的Serch Everywhere6、浏览项目新增预览模式7、在IDEA内部直接更新JDK8、拖拽标签页8、IDEA设为某些文件默认打开程序9、调试器 - 交互式提示10、调试器 - 内联watches11、Profiler - 更强大的分析器工具窗口12、Profiler - 对.jfr和.hprof轻松访问13、主菜单栏VCS -> Git14、基于机器学习的代码完成15、其它 升级建议 ✍总结✔推荐阅读: ♥关注A哥♥ ✍前言 你好,我是YourBatman。 2020庚子年是载入史册的一年,但对Jetbrain公司来说却是它的20周年。上个较大版本的发布,要追溯到8月份了: 时隔近4个月,北京时间2020-12-01深夜,IntelliJ IDEA再迎更新,这是2020年的第三个里程碑版本。踩着2020年的尾巴,Jetbrain团队完成了他们的“KPI”:交付了第三次里程碑版本。 最近几个版本的介绍这里可电梯直达: IntelliJ IDEA 2020.2正式发布,诸多亮点总有几款能助你提效IntelliJ IDEA 2020.1正式发布,你要的Almost都在这!IntelliJ IDEA 2019.3正式发布,给我们带来哪些新特性? ✍正文 我们知道,Jetbrain公司它简直就是个IDE工厂,产出过各种语言使用IDE,并且每个IDEA都做得都非常优秀,傲视群雄。本次除了发布最受瞩目的IntelliJ IDEA外,其它兄弟也相继’out’了(红红绿绿的简直亮瞎眼): 说明:Go语言用的IDE Goland本次发布的是Release Candidate而非正式Release,还得过个几天(不会扣Goland团队年终奖吧) 这么多兄弟能基于在几乎同一时间发布,有充分的理由相信它们使用的是同一基座,所以做到了一致的体验、一致的稳定、一致的优秀、一致的吃吃吃内存。IntelliJ IDEA作为最为出名的代表作,可以说是我们Java程序员的饭碗呀,接下来就来看看我们的新碗带来了哪些好玩的东西呢。 what’s new(新特性) 此版本在调试器中添加了交互式提示和嵌入式监视,改进了对Java 15的支持,并引入了对Git暂存的支持以及其它各种功能。然后呢,有些界面上也焕然一新了,做了重新设计。 按照惯例,先来张启动图新老对比: 设计师领盒饭去吧,我觉得这个启动图很难再有进步了。 1、全新的欢迎屏幕 老的在这: 这个不得不夸:进步了,更大气更方便了。此次IntelliJ IDEA欢迎屏幕经过重新设计,初始向导已替换为包含四个标签快速进入: 项目管理项目自定义设置IDE插件安装了解IntelliJ IDEA的访问帮助和学习资源 如果你是IDEA的初级使用者,或者想再学习一次IDEA,从这个页面点进去将会非常适合你 2、IDE主题已与操作系统设置同步 IntelliJ IDEA现在可以将其主题与您的OS主题同步。 勾选后,如果你的操作系统选用暗色主题,IDEA也会自动切换主题,保护双眼。 注意,有一点官方并未做出说明:此功能windows 7不支持,此功能windows 7不支持,此功能windows 7不支持,亲测截图为证: 可能你会说:为毛现在还有人用win 7?呃呃呃,我刚从XP升级上来… 3、一键进入阅读器模式 这个功能很赞,对阅读源码很有帮助。 默认情况在Reader模式下打开只读文件(也可以是本项目的只读文件)和来自外部库(Jar内)的文件,注释就像被格式化过一样,方便阅读。如下图表示你当前正在以阅读模式看此文件: 开启阅读模式的效果:像看web页面 关闭阅读模式的效果:像看html源代码

java: package org.xxxx does not exist(亲测有效)

java: package org.xxxx does not exist(亲测有效) 在intellij idea中载入java工程,通过maven build工程时报出程序包不存在问题,在工程里点击报不存在的类,又能进入相关class。网上贴出的程序包不存在的解释和修复措施不能解决我遇到的情况,后来仔细对比以往工程目录结构,发现这次载入工程居然没有自动创建xxx.iml文件,如是尝试解决此问题:开始->运行->切换到项目目录执行 mvn idea:module 命令执行完毕后生成iml文件,再次点击maven build工程顺利编译通过。 楼主亲测以下方法有用 主要是因为你修改了pom文件 所以需要重新执行命令:mvn idea:module 执行后会再下载一系列的依赖,完了后重新启动项目即可。

python中struct_简单介绍Python中的struct模块

准确地讲,Python没有专门处理字节的数据类型。但由于str既是字符串,又可以表示字节,所以,字节数组=str。而在C语言中,我们可以很方便地用struct、union来处理字节,以及字节和int,float的转换。 在Python中,比方说要把一个32位无符号整数变成字节,也就是4个长度的str,你得配合位运算符这么写: 非常麻烦。如果换成浮点数就无能为力了。 好在Python提供了一个struct模块来解决str和其他二进制数据类型的转换。 struct的pack函数把任意数据类型变成字符串: pack的第一个参数是处理指令,'>I'的意思是: >表示字节顺序是big-endian,也就是网络序,I表示4字节无符号整数。 后面的参数个数要和处理指令一致。 unpack把str变成相应的数据类型: 根据>IH的说明,后面的str依次变为I:4字节无符号整数和H:2字节无符号整数。 所以,尽管Python不适合编写底层操作字节流的代码,但在对性能要求不高的地方,利用struct就方便多了。 struct模块定义的数据类型可以参考Python官方文档: https://docs.python.org/2/library/struct.html#format-characters Windows的位图文件(.bmp)是一种非常简单的文件格式,我们来用struct分析一下。 首先找一个bmp文件,没有的话用“画图”画一个。 读入前30个字节来分析: BMP格式采用小端方式存储数据,文件头的结构按顺序如下: 两个字节:'BM'表示Windows位图,'BA'表示OS/2位图; 一个4字节整数:表示位图大小; 一个4字节整数:保留位,始终为0; 一个4字节整数:实际图像的偏移量; 一个4字节整数:Header的字节数; 一个4字节整数:图像宽度; 一个4字节整数:图像高度; 一个2字节整数:始终为1; 一个2字节整数:颜色数。 所以,组合起来用unpack读取: 结果显示,'B'、'M'说明是Windows位图,位图大小为640x360,颜色数为24。 请编写一个bmpinfo.py,可以检查任意文件是否是位图文件,如果是,打印出图片大小和颜色数。

python照片修复_python实现的jpg格式图片修复代码

# -*- coding: utf8 -*- # !/usr/bin/env python __author__ = 'fengxing' __date__ = '2012-1-18 20:13' import sys def jpgfix(name): sig = '\xFF\xD8\xFF\xDB' with open(name, "r") as fd: fd.seek(len(sig), 0) jpg = fd.read() pos = jpg.find(sig) if pos < 0: raise Exception('Not find signature') jpg = jpg[pos:] with open(name, "w") as fd: fd.seek(0, 0) print 'size is:', len(jpg) fd.write(jpg) if __name__ == '__main__': try: while True: jpgfix(sys.argv[1]) except: print 'Done'

Mac 使用Docker安装SQL Server并用Azure Data Studio管理SQL数据库

1、安装Docker https://www.docker.com/products/docker-desktop 2、设置Docker镜像 运行Docker,点击Preferences-Docker Engine,修改为如下镜像后,点击Apply&Restart。 { "features": { "buildkit": true }, "registry-mirrors": [ "http://hub-mirror.c.163.com" ], "experimental": false } 3、安装SQL Server镜像 打开终端,输入如下命令后,开始安装sql server的镜像 docker pull microsoft/mssql-server-linux:2017-latest 安装完后,输入如下命令,检查是否安装成功,结果如下图 docker images 4、启动sql server镜像 docker run -e 'ACCEPT_EULA=Y' -e 'SA_PASSWORD=Qwer1234!' -p 1401:1433 -d --name=sql1 mcr.microsoft.com/mssql/server:2017-latest 参数说明-e 'MSSQL_SA_PASSWORD=您的密码'设置SA用户的密码-p 1401:1433映射端口--name sql1设置Docker容器名称为sql1-e "ACCEPT_EULA=Y"将 ACCEPT_EULA 变量设置为任意值,以确认接受最终用户许可协议。 SQL Server 映像的必需设置。 输入如下命令,检查启动是否成功,结果如下图所以,它的STATUS是up。 docker ps -a 如果是第二次打开,可能STATUS变成Exit,这时候要重新启动它: docker start debf32e9ab5b 最后的编号是它的CONTAINER ID。 5、安装Azure Data Studio,连接sqlserver,连接的属性如下,密码就是在步骤4中设置的。 6、创建数据库

matlab的 switch case语句

switch case switch 开关表达式 case 表达式1(用来判断的句子) 语句组1(想要反馈是结果) case 表达式2 语句组2 ······ otherwise 语句组··· end (这里不显示空格好难受···) 举个例子 这里的syms是创建一个符号变量 相当于,告诉matlab这是一个瓶子 我给杯子里装牛奶就是奶瓶 装酒就是个酒瓶 相当于列方程时候先写一句:设未知数为x (列方程这个解释来自网络) syms n month = input('月份是:') switch 1<= month && month<=12 && mod(month,1)==0 case 1 <= month && month <= 3 n='在春天里' case 4<= month && month <= 6 n='夏天的风' case 7<= month && month<= 9 n='桂花飘香十里香' case 10<= month && month<=12 n='汤圆汤圆卖汤圆' end 只出现了一次报错: 错误: 文件: sxsy422.m 行: 4

VRF

VRF简介及创建 1.VRF理解 VRF相当于一个个独立路由表,STATIC是路由表里的一个(条目)策略,添加vrf相当于隔离建立多个独立的路由器。 2.VRF应用需求 假设PC1与R2这一侧的网络属于一个独立的业务;PC2与R3这一侧的网络属于另一个独立的业务,由于设备资源有限或者其他方面的原因,这两个独立的业务的相关节点连接在R1上,也就是同一台设备上。那么在完成相关配置后,R1的路由表如上图所示。 现在如果PC1要发一个数据包到2.2.2.2,那么这个数据包在到达R1后,R1就会去查看自己的路由表,发现有一条2.2.2.0/24的路由匹配,因此将这个IP包从GE0/0/2口转发给192.168.100.2。这是没有问题的,然而如果PC1要访问3.3.3.0/24网络呢?也是无压力的,因为数据包到达R1后,她照样查找路由表结果发现有匹配的路由,因此将数据包转给R3。但是实际上,从业务的角度考虑,我们禁止PC1访问3.3.3.0/24网络。 那么怎么办? 现在,我们在R1上创建两个VRF:VRF1及VRF2,创建完成后,我们可以理解为,拥有了两台虚拟路由器。当然,现在这两台虚拟路由器上啥也没有。 接下去我们将GE0/0/1口及GE0/0/2口绑定到VRF1;将GE0/0/3及GE0/0/4口绑定到VRF2。如此一来这两台虚拟路由器就各自拥有了两个物理接口。值得注意的是,这两台虚拟路由器是虽然都在同一台物理设备上,但是却是隔离的,他们将有自己的接口,自己的路由表,自己的ARP表等等相关的内容。我们的环境就变成有点像这样: 我们看到,VRF1及VRF2有了自己的接口,也有了自己的路由表。并且相互之间是隔离的。 现在PC1要发送一个数据包到2.2.2.2,R1从接口GE0/0/1收到了这个数据包,由于此时GE0/0/1已经绑定到了VRF1,因此在执行目的IP的路由查找的时候,查的是VRF1的路由表,查找到匹配的路由条目后,间个数据包从其指示的GE0/0/1口转发给下一跳192.168.100.2。 那么如果PC1要访问3.3.3.3呢?数据包发到了R1,R1从接口GE0/0/1收到了这个数据包,于是它在做路由查找的时候,查的仍然是VRF1的路由表。经过查表后,它发现并无匹配的条目,因此将数据包丢弃。 3. 不同环境的VRF创建 Linux Kernel中VRF的使用(iproute的namespace) 1 2 3 4 #创建命令空间 ip netns add vrf1 #命名空间中执行ifconfig ip netns exec vrf1 ifconfig Linux Kernel中轻量级VRF的使用(高版本iproute的vrf) 具体可参考文章https://turbock79.cn/?p=299 1 2 #创建vrf red ip link add red type vrf table 1 VPP 中的VRF的使用 1 2 3 4 vpp # ip table add 100 //创建ip4 vrf 100 vpp # show ip fib //查看 vpp # ip6 table add 200 //创建IP6 vrf 200

[转载] java语言程序设计-基础篇

参考链接: Java中的决策制定(if,if-else,switch,break,continue,jump) 第1章,计算机、程序和Java概述 包括【每个java初学者都应该搞懂的问题】 http://blog.csdn.net/haobo920/article/details/5784990 1,java背景 特点: 一次编译,到处运行(Write Once, Run Anywhere.)。 原理: Java源程序经编译后生成.class字节码文件,.class文件由Java虚拟机(JVM)解释执行。不同的操作系统下,只要有相应的Java字节码解释程序,.class文件就能够运行,这是Java跨平台性的根本。 比较: c和java编程与执行的过程如下图所示: 分类: java application:应用程序是独立的程序,能够在任何有JVM的计算机上运行。 java applet: 是一种特殊的Java程序,可以在web浏览器中直接运行。 java servlet: 是一种特殊的Java程序,可以在web服务器上运行,创建动态的web内容。【Java Server Pages(JSP)则可以在服务器端生成动态网页】 2,创建、编译和运行Java程序 示例: public class Welcome{ public static void main(String [] args){ System.out.println("welcome"); } } 创建: 将该文件保存为Welcome.java:注意文件名必须与公用类名完全相同,这里是public class Welcome,所以文件名必须是Welcome.java 编译: 再将文件Welcome.java编译为Welcome.class: javac Welcome.java 运行: 再执行字节码文件Welcome.class: java Welcome 注意这里不再需要扩展名".class",JVM把命令的第一个参数当做文件名,如果写作 java Welcome.class则实际上会去查找Welcome.class.class。 3,Java语法特点 大小写: Java是大小写敏感的。 注释: 除了//和/*这两种注释,Java还支持一种称为Java文档注释的特殊注释,以/**开头,*/结尾,主要用于描述类、数据和方法,它可以通过JDK的javadoc命令转换为HTML文件。 /**Title: XXXX DRIVER 3.0 *Description: XXXX DRIVER 3.0 *Copyright: Copyright (c) 2003

小猫爪:嵌入式小知识09-LCD Parallel RGB接口(转载)

小猫爪:嵌入式小知识09-LCD Parallel RGB接口(转载) 1 前言2 转载内容2.1 液晶显示器2.2 显示器的基本参数2.3 显存2.4 Parallel RGB接口定义2.5 Parallel RGB接口传输时序 END 1 前言 在嵌入式开发中,有几个主流的LCD接口方式,比如RGB接口,LVDS接口,MIPI DSI接口,HDMI接口等,今天就来说一说RGB接口中Parallel RGB接口。 2 转载内容 的看到野火教程对于LCD接口介绍的很详细,我就给直接搬运过来了。 2.1 液晶显示器 液晶显示器,简称LCD(Liquid Crystal Display),相对于上一代CRT 显示器(阴极射线管显示器),LCD 显示器具有功耗低、体积小、承载的信息量大及不伤眼的优点,因而它成为了现在的主流电子显示设备,其中包括电视、电脑显示器、手机屏幕及各种嵌入式设备的显示器。液晶是一种介于固体和液体之间的特殊物质,它是一种有机化合物,常态下呈液态,但是它的分子排列却和固体晶体一样非常规则,因此取名液晶。如果给液晶施加电场,会改变它的分子排列,从而改变光线的传播方向,配合偏振光片,它就具有控制光线透过率的作用,再配合彩色滤光片,改变加给液晶电压大小,就能改变某一颜色透光量的多少,图 24-2 中的就是绿色显示结构。利用这种原理,做出可控红、绿、蓝光输出强度的显示结构,把三种显示结构组成一个显示单位,通过控制红绿蓝的强度,可以使该单位混合输出不同的色彩,这样的一个显示单位被称为像素。 2.2 显示器的基本参数 像素 像素是组成图像的最基本单元要素,显示器的像素是指它成像最小的点,即前面讲解液晶原理中提到的一个显示单元。 分辨率 一些嵌入式设备的显示器常常以“行像素值x 列像素值”表示屏幕的分辨率。如分辨率800x480 表示该显示器的每一行有800个像素点,每一列有480 个像素点,也可理解为有800 列,480 行。 色彩深度 色彩深度指显示器的每个像素点能表示多少种颜色,一般用“位”(bit)来表示。如单 色屏的每个像素点能表示亮或灭两种状态(即实际上能显示2 种颜色),用1 个数据位就可以表示像素点的所有状态,所以它的色彩深度为1bit,其它常见的显示屏色深为16bit、24bit。 显示器尺寸 显示器的大小一般以英寸表示,如5 英寸、21 英寸、24 英寸等,这个长度是指屏幕对角线的长度,通过显示器的对角线长度及长宽比可确定显示器的实际长宽尺寸。 点距 点距指两个相邻像素点之间的距离,它会影响画质的细腻度及观看距离,相同尺寸的屏幕,若分辨率越高,则点距越小,画质越细腻。如现在有些手机的屏幕分辨率比电 脑显示器的还大,这是手机屏幕点距小的原因;LED点阵显示屏的点距一般都比较大, 所以适合远距离观看。 2.3 显存 液晶屏中的每个像素点都是数据,在实际应用中需要把每个像素点的数据缓存起来,再传输给液晶屏,这种存储显示数据的存储器被称为显存。显存一般至少要能存储液晶屏的一帧显示数据,如分辨率为800x480 的液晶屏,使用RGB888 格式显示,它的一帧显示数据大小为:3x800x480=1152000 字节;若使用RGB565 格式显示,一帧显示数据大小为:2x800x480=768000 字节。 (补充:在一些常用的嵌入式LCD应用中,常常使用双缓存来当做显存,这样就可以在第一帧显存数据传输过程中,CPU可以同时准备下一帧的数据(一般数据搬运是通过DMA来做,CPU只负责显存内容计算),这样当第一帧传输结束后,就可以及时开始下一帧的传输。) 2.4 Parallel RGB接口定义 Parallel RGB接口定义如下:

MacBook安装应用后在LaunchPad里不出现解决

MacBook安装应用后在LaunchPad里不出现,却在Finder的Applications里可以找到。 解决方法:terminal >> defaults write com.apple.dock ResetLaunchPad -bool true >> killall Dock Dock会重启,LaunchPad也重置,安装的应用都会出现。

MySQL不要用户名密码直接登录解决

MySQLmysql-5.7.32-winx64安装后控制台登录不需要密码解决 文章目录 MySQLmysql-5.7.32-winx64安装后控制台登录不需要密码解决问题描述一、版本二、数据库跳过密码登录1.Windows PowerShell中执行命令mysql直接成功登录2.解决方案 总结 问题描述 mysql-5.7.32-winx64解压版安装配置my.ini文件夹后,控制台登录不需要用户名和密码,在百度参考各位大佬的解决方案已经自己的多次尝试,寻找到成功解决的方案 一、版本 数据库: mysql-5.7.32-winx64.zip,官网下载 操作系统 Windows 10 专业版 20H2 二、数据库跳过密码登录 1.Windows PowerShell中执行命令mysql直接成功登录 百度参考了很多密码设置,重置密码,包括删除默认空用户的方法,都不能解决,注意到skip-grant-tables这个跳过登录验证的指令,在安装完数据库建立my.ini文件时里面配置了该指令,问题就在这。 2.解决方案 修改前my.ini文件内容: (我的my.ini路径:D:\MySQL\mysql-5.7.32-winx6\my.ini) 文件内容: [client] port=3306 default-character-set=utf8 [mysqld] #skip-grant-tables port=3306 character_set_server=utf8 basedir=D:\MySQL\mysql-5.7.32-winx64 #解压目录 datadir=D:\MySQL\mysql-5.7.32-winx64\data #解压目录下data目录 sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES [WinMySQLAdmin] D:\MySQL\mysql-5.7.32-winx64\bin\mysqld.exe 将skip-grant-tables注释掉: 命令行关闭数据库mysql> exit; 关闭服务net stop mysql; 打开服务net start mysql; 执行mysql命令:报错ERROR 1045 (28000): Access denied for user ‘ODBC’@‘localhost’ (using password: NO) 执行正常登陆命令:mysql -uroot -p,提示输入密码,之前设置的密码,成功登录但是不能查看数据库 执行命令 show databases;查看数据库报错 执行命令set password=password(‘输入你自己的密码’);设置密码 执行命令show databases;再次查看数据库成功 总结 提示:这里对文章进行总结: