Amazon Linux AMI Install Mysql / Redis

我太难了。。 Mysql 以下全部sudo yum update yum install mysql57-server service mysqld start chkconfig mysqld on Secure mysql_secure_installation Redis https://medium.com/@ss.shawnshi/how-to-install-redis-on-ec2-server-for-fast-in-memory-database-f30c3ef8c35e 转载于:https://www.cnblogs.com/GW977/p/11593646.html

水仙花数的三种解决方法(Python实现)

先来了解一下什么是水仙花数。水仙花数是这样一个三位数:它的个位数、十位数、百位数的三次方之和,等于它自身。例如,153就是一个水仙花数,因为153=1^3+5^3+3^3。470也是一个水仙花数,因为470=4^3+7^3+0^3。 我们今天的任务就是,编程求100到999之间所有的水仙花数。 那么这个题目的关键就是,给定一个三位数abc,如何获得它的个位数c,十位数b,百位数a? 我们先来看第一种解决方案,也是最主流的解决方法:数位分离。 以153为例,我们先看,如何获得它的个位数3?只要%10就可以了: 153%10=3 通过模10运算,我们将个位数3分离了出来。 那么如何分离十位数5?先将十位数挪到个位,再利用%10,不就可以分离出来了吗? 通过除以10向下取整,可以将十位数挪到个位上来: 153//10=15 再利用模运算分离个位上的10即可: 15%10=5 这样我们就获得了十位数5. 同理,如果想得到153的百位数,将153除以100向下取整即可: 153 // 100 = 1 这就是数位分离的思想,先得到要验证的总数,再将各个位数分离出来。 代码实现如下: for num in range(100,1000): hundred=num//100 ten=(num//10)%10 single=num%10 if num==hundred**3+ten**3+single**3: print('%d是一个水仙花数'%num) 这种方法逻辑很清晰,不过若是没见过这种解法的人,第一次怕是想不到数位分离的方法。其实,初学者更容易理解顺向思维的解法。 设个位数为a,十位数为b,百位数为c,则总数为a+10b+100c 判断a^3+b^3+c^3 == a+10b+100c即可。 for a in range(10): for b in range(10): for c in range(1,10): sum = a + 10*b + 100*c if a**3 + b**3 + c**3 == sum: print("%d是一个水仙花数"%sum) 还有一种方法,可以利用字符串的特性,轻松地实现三个位数上的提取: 先将这个三位数转换成字符串,通过下标就可以提取个位、十位、百位数。再将提取出的字符转换成int型即可。 代码如下: for num in range(100,1000): s=str(num) hundred=int(s[0]) ten=int(s[1]) digit=int(s[2]) if num==hundred**3+ten**3+digit**3: print(num)

tomcat服务器中各个目录及文件夹的含义

我们在设计Java Web项目的过程中,经常会用到tomcat服务器,所以我们也需要对tomcat有一定的了解。今天就给大家分享一下tomcat服务器下各个目录和文件夹的一些作用 这里我们以tomcat-7.0.53为例,目录结构如下: 我们可以看到一共有bin,conf,lib,logs,temp,webapps,work, 一共7个文件夹,下面来对它们分别进行介绍: (1)bin目录 该目录主要是用来存放tomcat的命令,主要有两大类,一类是以.sh结尾的(linux命令),另一类是以.bat结尾的(windows命令)。 重要提示: 很多环境变量的设置都在此处,例如可以设置JDK路径、tomcat路径; startup 用来启动tomcat;shutdown 用来关闭tomcat;修改catalina可以设置tomcat的内存。 (2)conf目录 该目录主要是用来存放tomcat的一些配置文件。 重要提示: server.xml可以设置端口号、设置域名或IP、默认加载的项目、请求编码; web.xml可以设置tomcat支持的文件类型; context.xml可以用来配置数据源之类的信息; tomcat-users.xml用来配置管理tomcat的用户与权限; 在catalina目录下可以设置默认加载的项目。 (3)lib目录 该目录主要用来存放tomcat运行需要加载的jar包。 例如,像连接数据库的jdbc的包我们可以加入到lib目录中来。 (4)logs目录 该目录主要用来存放tomcat在运行过程中产生的日志文件,非常重要的是在控制台输出的日志。(清空不会对tomcat运行带来影响), 在windows环境中,控制台的输出日志在catalina.xxxx-xx-xx.log文件中; 在linux环境中,控制台的输出日志在catalina.out文件中。 (5)temp目录 该目录主要是给用户存放tomcat在运行过程中产生的临时文件。(清空不会对tomcat运行带来影响) (6)webapps目录 该目录主要是用来存放应用程序,当tomcat启动时会去加载webapps目录下的应用程序。可以以文件夹、war包、jar包的形式发布应用。当然,你也可以把应用程序放置在磁盘的任意位置,在配置文件中映射好就行。 (7)work目录 该目录主要是用来存放tomcat在运行时编译后的文件,例如JSP编译后的文件。 清空work目录,然后重启tomcat,可以达到清除缓存的作用。 好啦,以上讲解的就这么多啦,希望对你有帮助!!!

base/7/x86_64/filelists_db FAILED

解决办法: [root@localhost ~]# cd /var/lib/rpm [root@localhost rpm]# rm -rf __db.* # 清除原 rpmdb 文件 [root@localhost rpm]# rpm --rebuilddb # 重建 rpm 数据库 [root@localhost rpm]# yum clean all # 清除所有 yum 缓存 如果以上方法未能解决问题,请按照下面的方法再继续操作: # 检查 yum 源配置文件 [root@localhost rpm]# cd /etc/yum.repos.d/ # 更新 yum 源 [root@localhost yum.repos.d]# yum update -y --skip-broken # 清除所有 yum 缓存 [root@localhost yum.repos.d]# yum clean all Loaded plugins: fastestmirror Cleaning repos: base epel extras updates Cleaning up list of fastest mirrors

Android studio 怎样连接手机运行,Android studio连接手机调试

今天百度了一下如何在在Android studio如何在真机上运行,比较复杂,看了很多,现在给大家总结一下: 1、首先要将手机连接到电脑上,直接在电脑上安装一个应用宝,然后在手机上也安装一个应用宝,通过应用宝将手机连接到电脑上 2、打开手机的USB调试,选择 传输文件就行 3、在电脑端的应用宝,连接手机,我使用的是扫码连接 4、让后再Android studio 上选择手机运行即可 我的手机是华为,选择上,然后点击运行按钮就可以 注:最近发现了一个问题,通过这种方式确实可以在自己手机上运行,但是这个APP好像不能分享给别人,原因好像是系统不兼容,Android studio为你安上的是x86系统的

js毫秒值转日期格式化

毫秒值为:1492665265000 毫秒值对应的时间为:2017-4-20 13:14:25 要把这个毫秒值转换为日期,可以通过 var date = new Date(1492665265000); console.log(date); Thu Apr 20 2017 13:14:25 GMT+0800 (中国标准时间) 把日期格式化(根据本地时间格式)可以通过toLocaleString() var date = new Date(1492665265000).toLocaleString(); console.log(date); 2017-4-20 13:14:25 把日期格式化(根据世界时)可以通过toUTCString() var date = new Date(1492665265000).toUTCString(); console.log(date); Thu, 20 Apr 2017 05:14:25 GMT 获取当前日期毫秒值可以通过getTime(); var date = new Date().getTime(); console.log(date); 1569398286187

shell教程(4)变量(二):字符串变量截取、替换和删除

文章目录 获取变量字符串长度变量的截取指定位置截取字符串匹配字符串截取 变量的字符串替换删除字符串变量为空时赋默认值实战:统计文章单词情况参考 哭着也要更完 Shell编程目前已经写了3篇: shell教程(1):有没有兴趣玩耍一下shell版俄罗斯方块? shell教程(2):积木游戏之认识积木–重要的系统命令 shell教程(3)变量(一):a=1?没那么简单 同期也把这个项目放在github上: Shell-10-Lessons (https://github.com/neptuneyt/Shell-10-Lessons) 但无论是在公众号还是在GitHub阅读量都惨不忍睹,在GitHub甚至是0Watch、0Star、1Fork,小编已经哭晕在厕所。。。 好在唯一的那个Fork居然是小明同学的偶像天津医科大学的小伊老师,截图为证: 虽然不知道小伊老师是不是手抖误点了Fork键,但小编还是万分激动的,有大佬关注,小编就是哭着也要更完。 前面一讲提到了Shell变量存储数据的主要类型是字符串,例如net="www.baidu.com",其实Shell对字符串变量的操作是十分强大的,想象一下你是程序语言设计开发者,对于一个诸如"www.baidu.com"的变量net,你允许对它进行什么操作呢?是不是要能知道这个字符串的长度?是不是要能随意截取字符串?是不是要能随意替换、删除字符串?变量为空时能不能赋值一个默认的字符串数据?等等的操作,在Shell字符串的变量操作中都是可以实现的。 获取变量字符串长度 想要知道"www.baidu.com"的变量net的长度十分简单,通过${#net}即可获取。 [Neptuneyt]$ net="www.baidu.com" [Neptuneyt]$ echo ${#net} 13 当然,在Shell中获取字符串变量的长度的方法有许多种,但是${#variable}作为一种系统内建的方法是最快的。 [Neptuneyt]$ echo ${#net} 13 [Neptuneyt]$ echo ${net}|wc -L 13 [Neptuneyt]$ expr length ${net} 13 [Neptuneyt]$ echo ${net}|awk '{print length($0)}' 13 获取字符串长度十分有用,文末给出一个统计文章单词词频数和字长频数的小脚本。 变量的截取 字符串的截取有多种方式,常见的包括: 指定位置截取字符串 [Neptuneyt]$ net="www.baidu.com" [Neptuneyt]$ # 从第4个字符截取到baidu [Neptuneyt]$ echo ${net:4:5} #从第4个字符.开始截取5个字符 baidu [Neptuneyt]$ # 截取baidu.com [Neptuneyt]$ echo ${net:4} #起始位置后不接截取字符长度则默认截取之后所有的 baidu.com [Neptuneyt]$ # 用倒数截取com [Neptuneyt]$ echo ${net:0-3} #从倒数第三个字符截取到末尾 com [Neptuneyt]$ echo ${net: -3} #另外的写法,一定要注意冒号和-3之间有空格 com [Neptuneyt]$ echo ${net:-3} #不加空格,截取失败 www.

Web前端开发规范之文件存储位置规范

文件存放位置规范 1 文件夹说明 flash存放flash文件 p_w_picpaths存放图片文件 inc存放include文件 library存放DW库文件 media存放多媒体文件 script存放javascript脚本 css存放css文件 2 网站页面位置存放 2.1 客户端 web 网站根目录 2.2 服务器端 admin 原文地址;https://blog.51cto.com/lakaodekaola/1979706 转载于:https://www.cnblogs.com/JunhanLin/p/11581661.html

XXE 漏洞基本的了解

XXE 注入 在开始之前,先认识一下,最常见的XXE漏洞类型,这样有助于攻击并创造最终正确的 POC: 1.基础的 XXE 注入——外部实体注入本地 DTD。 2.基于盲注的 XXE 注入—— XML 解析器在响应中不显示任何错误。 3.基于错误的 XXE 注入——成功解析之后,XML 解析器始终显示 SAME 响应。即“你的消息已被接收”,因此,我们可能希望解析器将文件的内容 打印 到错误响应中。 XXE是一个非常强大的攻击,它允许我们操纵错误的XML解析器并利用它们。请注意,有更多的技术和攻击利用方式可以通过XXE注入完成。如前所述,每个解析器都有不同的能力,因此我们可以提出不同的漏洞;; 看了一张相关的文章所以知道了 XXE 漏洞攻击; https://www.secpulse.com/archives/58915.html 还有一个下载的实验;https://appsec-labs.com/portal/wp-content/uploads/2016/09/XXE-demo-try-it-onyourself.rar 这个文章有一个原文链接:https://appsec-labs.com/portal/xxe-attacking-guide/ 看了几个 XXE 漏洞很多文章都是在2016 2017 的;过后做一下这个 XXE 漏洞实验; 看了一个内网大杀器利用:CVE - 2019 - 1024 漏洞 链接如下: https://msd.misuland.com/pd/3255817997595445898 学习一下 转载于:https://www.cnblogs.com/H-hy/p/11581357.html

Sigmoid作为激活函数导致的梯度消失问题

首先,问题描述: 当很多个使用sigmoid的Layers 加到神经网络中时,损失函数的梯度会接近0,这会导致 network难以训练。因为我们使用梯度乘以学习率来更新权值参数的。 那么为什么呢? 像sigmoid这样的激活函数,它把输入从一个大的空间压缩到一个只有0到1的范围内的很小的空间,作为下一层的输入。因此在输入层一个大的改变,通过sigmoid,最终到输出只有一个小的改变,也就是说导数变小了。 上图,蓝色实线是sigmoid函数形态,红色虚线是其导数的几何形态。我们可以看出,当输入值很大或很小时,也就是说当输入值向横轴的两端延伸时,导数接近于0 如果是只有几个sigmoid层的浅层神经网络,这并不会引起很大的问题。然而,当非常多的sigmoid层时,它会导致梯度太小而无法训练,这就是我们说的梯度消失。 神经网络的梯度通过反向传播来得到,简单的说,反向传播通过从最终层到初始层,误差逐层传播来得到梯度,通过链式求导法则,每一层的导数会乘到一起来计算初始层的导数。 然后,当n个隐层使用像sigmoid这样的激活函数时,会有n个非常小的导数值乘到一起,这样,随着我们逐层反向传播到初始层,梯度会呈指数级的下降。 显然极小的梯度值使得初始层的权值和偏置几乎无法有效的更新。而这些初始层,在识别输入数据的基础模式是至关重要的,它的不准确将导致整个神经网络的不准确。 解决方法 最简单的解决方法是使用另一种激活函数,比如 ReLU,它通常不会产生一个很小的导数 另外还有一个方法,是batch normalization 由前面的叙述,我们知道,梯度消失的产生,是因为sigmoid把输入从很大的空间映射到了一个很小的空间,尤其是当|X|很大的时候,它的导数都是接近0的。batch normalization 通过简单的标准化,来减轻该问题的产生, 我们可以看到,input标准化后,它会落在绿色的区域内,因此他的导数也不会太小。

Python交换变量值的语法分析

Python交换变量值的语法分析 首先,我们要明确一点区别。在python中一个变量在内存中是如何存储的,其他语言又是如何存储的? 在其他语言中,例如C语言中,变量名是内存地址的别名,不单独占据内存空间。变量名只是一个便于记忆识别的名称,编译器会将他编译成相应的内存地址的。 而在python中当我们运行 a = 10 这句代码时,内存空间中开辟了两块区域,变量名占据一块区域,引用了常量值的内存地址。 也就是说,C语言中变量变的是内存空间中的值,不变的是地址;而在Python中,变量变的是地址,不变的是内存空间中的值。 来思考一下,假设在C语言中使用python交换变量的语法(编译器不会报出语法错误),会发生什么? int a = 10, b = 20; a, b = b, a; 首先a的值直接被更改为b的值,当再为b赋值a的值时,此时a的值已经是b的值了,所以b值没变。 所有运行后,a = 20, b = 20 那么在python中运行代码时: 首先,在赋值时在内存中的对应关系看起来像这样: a —> 10 b —> 20 在运行 a, b = b, a 时,会先将变量引用的值拿到 a, b = 20, 10 然后再分别将变量的引用指向对应的常量。 由于python改变的是引用,没改变值,所以它可以完成交换。

Flask建站笔记-使用jinjia模板

jinjia语法类似于JavaWeb中的jsp。可以以特定语法规则直接在html中与后台产生交互,并实现一些简单的逻辑操作。 后台函数 @blog.route("/blog") def blog(): data = [...] return render_templates("index.html", data=data) 变量表示 {{ data[0] }} if判断 {% if data %} <p>{{ one }}<p> {% endif %} for循环 {% for one in data %} <p>{{ one }}<p> {% endfor %} block块 使用block块,我们可以定义一个模板html,实现页面风格的统一 base.html <!DOCTYPE html> <html lang="en"> <head> <title>{% block title %}Title{% endblock %}</title> </head> <body style="background-color:#eeeeee"> <!--页头--> <div id="divHead" class="row" style="background-color: #4d91a1"> </div> <!--内容块--> {% block content %} {% endblock %} <!

操作系统与计算机组成原理

主存的结构 1)高位交叉编址 2)低位交叉编址与流水线方式并行存取 a.存取周期:cpu对内存两次读或写操作之间的时间间隔 总线周期:总线传输一次数据花费的时间 3)访存排队器 主存是与cpu,还是io,还是辅存交互,其顺序是受访存排队器控制的 a.由于易丢失代码,io的优先级最高 b.严重影响cpu工作的请求源,优先级次高,比如写可能优先于读 缓存的工作原理 1.cache的基本工作原理(命中率,访存效率,平均访问时间) 2.cache的读取和写入操作(读流程,写直达法,回写法,多缓存一致性问题) 3.cache与主存的地址映射(内存块大小与缓存块大小是一样的) 4.缓存块的替换策略 FIFO先进先出策略(命中率低) LRU最久未使用策略(命中率高) 5.磁盘 定位到某一个数据块的时间=找到磁盘面+寻道+等待磁盘转动到指定位置 主存-磁盘体系 1.内存空间的分配与回收 2.内存空间的扩充 3.地址转换 4.内存保护-内存是重定位寄存器和界地址寄存器保证进程不相互影响的 1)cpu使用逻辑地址 2)判断逻辑地址是否小于界地址寄存器 3)若没有越界,则加上重定位寄存器(基地址寄存器),得到物理地址 4)cpu在切换到执行某一进程时,会初始化重定位寄存器和界址寄存器 1.分页存储管理 1)把内存和磁盘块都划分为等大小块,每一个小块就是“页”,磁盘块块叫"页面",内存块称为“页框”。在内存中要为每一个进程维护一张“页号-磁盘物理地址”映射关系表,称之为“页表” 2)a.虚拟地址为A,页大小为L,则页号为A/L,页内偏移为A mod L b.页号P的页表项地址 = 页表项首地址+P x 页表项长度 c.物理地址 = 磁盘号 x 块大小 + 磁盘内偏移量 3)多级页表与B树的关系 4)分页存储管理是为了提高内存利用率,是内存与磁盘之间的协作 2.分段存储管理 1)段表:解决的是应用程序逻辑地址与内存中逻辑地址的映射关系 2)取出逻辑地址中的段号,从段表中获取始地址,与偏移量相加,即获得主存中的逻辑地址 3)段式存储能清晰的反映程序的逻辑结构 3.段页式存储管理 为了既能反应程序的逻辑结构,又能提高内存利用率,故而采用段页式存储 1)将程序分为若干段,故逻辑地址需要有“段号” 2)每一段分为若干页,所以段式存储中地址格式的“段长” 变为 “页长”,表示该段有几页 3)页始址 替代 段始址 文件系统

OriginPro中三维图片旋转

在Tecplot中我们可以点击如下按钮,实现三维视图的旋转, 那如果我们在OriginPro中怎么实现呢? 看到没有,看到的老铁双击一波666

Html大段文本自适应换行显示-SSM

只处理前端: <style> .ctl{ table-layout:fixed } .ctl td{ word-break:break-all } </style> <div> <table cellSpacing="0" cellpadding="1" width="100%" class="ctl" border=1> <tBody> <tr><td th:text="${seq}"></td></tr> </tBody> </table> </div> 这样行数会自动调整,文本不会溢出表格。 bug:字符串中的\r\n会变为空格,虽然在控制台可以看到换行符确实存在,但浏览器渲染时会变成空格。 暂时没有处理这个问题,先留坑。 ========================================================== 我是Ruriko,我爱这个世界:) 转载于:https://www.cnblogs.com/pxy7896/p/11572196.html

Could not find 'adb.exe' in PATH. Please set the ANDROID_HOME environment variable with the Android

Could not find ‘adb.exe’ in PATH. Please set the ANDROID_HOME environment variable with the Android SDK root directory path 原因推测:java jdk 没有安装? jre安装成功标志:java -version jdk安装成功标志:javac -version https://www.cnblogs.com/shirley-0021/p/8510051.html win10 , JAVA安装 环境搭建 一.关于下载地址及方式: 1.百度搜索JDK,进入下载官网,具体网址如下: click me!!! 2.根据你电脑的不同系统选择对应的下载,当然首先你要点击Accept License Agreement 同意此进行! 3.下载完成后,点击安装 二.关于安装过程: 1.选择安装路径时,注意该路径不能包含中文名 这里我们可以通过“更改”选择自己想要安装到的目录,然后点击下一步即可。 到这里我们只安装了jdk,安装向导会检查到你未安装jre,然后提示你安装jre,建议最好装上。 2.安装JRE 选择一个你喜欢的文件夹,注意这个文件夹不要是jdk安装目录,否则会覆盖掉jdk目录下的jre目录 我们这里选择安装到和JDK同级的目录下,点击下一步之后即可完成安装,然后提示已成功安装 3.若想验证你是否已安装正确,按window+R或者点击运行输入cmd,打开命令行窗口,在界面中输入java -version,若出现以下文字即表明下载正确 三.关于环境配置 1.我的电脑→右键→属性→高级系统设置→环境变量 新建一个变量名为“JAVA_HOME”的系统变量,变量值为“C:\Program Files\Java\jdk1.8.0_161”(jdk的安装目录,根据个人所安装的目录修改) 2.再新建一个变量名为“CLASSPATH”,变量值为“.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar;”的系统变量,注意前面的点号和分号都是有的 3.打开“Path”系统变量,点击新建,添加“%JAVA_HOME%\bin”和“%JAVA_HOME%\jre\bin”两个系统变量。Path使得系统可以在任何路径下识别java命令 四.验证: 点击保存后,按window+R或者点击运行输入cmd,打开命令行窗口 分别输入java和javac都正常运行即代表java已经正确安装。 如果出现类似"javac不是内部或外部命令"等提示语句,请再三检查你的环境变量是否正确配置,或者JDK和JRE安装目录是否重复,如果重复,可以选择再次运行下载的jdk安装程序重新安装。 Just do what you want!

前端demo(2)_旋转木马

<!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8"> <title>3D旋转</title> <style type="text/css"> *{padding: 0; margin: 0;} body,html{height:100%;} body{background-image: url("images/8.jpg");background-size: 100% 100%;} #box{width: 280px; height: 400px; position: fixed; left: 0; right: 0; top:0; bottom: 0; margin: auto; transform-style: preserve-3d; transform: rotateX(0deg) rotateY(0deg); animation: go 45s linear infinite; } #box img{width: 280px; height: 400px; position: absolute; left: 0; top: 0; } #box img:nth-child(1){ transform: rotateY(0deg) translateZ(650px);} #box img:nth-child(2){ transform: rotateY(36deg) translateZ(650px);} #box img:nth-child(3){

前端dome(1)_钟表

<!doctype html> <html> <head> <meta charset="utf-8"> </head> <body> <canvas id="canvas" width="500" height="500" > 您的浏览器不支持canvas标签,无法看到时钟 </canvas> <script> var canvas=document.getElementById("canvas"); var cxt=canvas.getContext("2d"); function drawClock(){ cxt.clearRect(0,0,500,500); var now=new Date(); var sec=now.getSeconds(); var min=now.getMinutes(); var hour=now.getHours(); hour=hour+min/60; hour=hour>12?hour-12:hour; cxt.beginPath(); cxt.lineWidth=5; cxt.strokeStyle="beige"; cxt.arc(250,250,200,0,2*Math.PI,false); cxt.stroke(); cxt.closePath(); for(var i=0;i<12;i++){ cxt.beginPath(); cxt.save(); cxt.strokeStyle="purple"; cxt.lineWidth=5; cxt.translate(250,250); cxt.rotate(i*30*Math.PI/180); cxt.moveTo(0,-170); cxt.lineTo(0,-190); cxt.stroke(); cxt.restore(); cxt.closePath(); } /* 表盘 */ for(var i=0;i<60;i++){ cxt.beginPath(); cxt.save(); cxt.strokeStyle="gold"; cxt.lineWidth=3; cxt.translate(250,250); cxt.rotate(i*6*Math.PI/180); cxt.moveTo(0,-180); cxt.lineTo(0,-190); cxt.stroke(); cxt.restore();

C#中设置状态栏(statusStrip)的布局

解决方案: 状态栏所有项目(StatusLabel、ProgressBar、DropDownButton等)前添加一个空白的StatusLabel (Text属性为空),并将其Spring属性设为True。 Spring属性的作用是设置该项是否填满剩余空间,设为True以后,当程序运行时后面的项就都挤到右边,实现靠右对齐了。 如果更进一步,需要一部分项靠左,一部分靠右,那就在两部分中间插入空白StatusLabel,同时设其Spring属性为True。

Python函数

博文大纲: 一、函数二、变量的作用域三、内建函数 一、函数 Python中的函数都是语句和表达式的集合。和shell脚本中的函数功能一致,可以把函数当做是给一堆代码起定义了一个别名,当需要执行这堆代码时,直接调用那一堆代码集合的“别名”即可。 对于脚本中需要重复使用的代码,需要编写为自定义函数以便于重复使用。 1、无参函数 定义无参函数的语法格式如下: def 函数名称(): 代码块 return [表达式] 定义无参函数是以关键字def,后面跟函数名和小括号,以冒号开头并缩进,最后使用return退出函数,有表达式则传递返回值,没有则返回None。函数是以字母、数字和下划线组成的字符串,但是不能以数字开头。使用函数必须先定义再调用,否则程序会出现错误。 无参函数举例: 示例一: #代码如下: def add(): #定义函数 op1 = 10 op2 = 20 rt = op1 + op2 print op1, '+', op2 ,'=',rt return add() #调用函数 #执行结果如下: 10 + 20 = 30 也可以将上面的代码进行修改,使用return语句返回结果值。 #代码如下: def add(): op1 = 10 op2 = 20 rt = op1 + op2 return rt i = add() #函数返回的结果赋值给变量i print '结果是:',i #执行结果如下: 结果是: 30 在上面的代码中,函数add()使用return语句返回相加的结果值,变量i接收函数add()返回的值。Python在处理返回值时,如果没有return语句,会默认返回None,程序并不会报错。

统计学基础之方差分析

目录:(摘自百度百科) 一、基本概念 二、类型: 1、单因素方差分析 2、双因素方差分析 3、协方差分析 一、基本概念 方差分析又称“变异数分析”或“F检验”,用于两个及两个以上样本均数差别的显著性检验。 方差分析的基本原理是认为不同处理组的均数间的差别基本来源有两个: (1) 实验条件,即不同的处理造成的差异,称为组间差异。用变量在各组的均值与总均值之偏差平方和的总和表示,记作SSb,组间自由度dfb。 (2) 随机误差,如测量误差造成的差异或个体间的差异,称为组内差异,用变量在各组的均值与该组内变量值之偏差平方和的总和表示, 记作SSw,组内自由度dfw。 总偏差平方和 SSt = SSb + SSw。 组内SSw、组间SSb除以各自的自由度(组内dfw =n-m,组间dfb=m-1,其中n为样本总数,m为组数),得到其均方MSw和MSb,一种情况是处理没有作用,即各组样本均来自同一总体,MSb/MSw≈1。另一种情况是处理确实有作用,组间均方是由于误差与不同处理共同导致的结果,即各样本来自不同总体。那么,MSb>>MSw(远远大于)。 MSb/MSw比值构成F分布。用F值与其临界值比较,推断各样本是否来自相同的总体。 二、类型: 1、单因素方差分析 是用来研究一个控制变量的不同水平是否对观测变量产生了显著影响。研究单个因素对观测变量的影响,因此称为单因素方差分析。 例如,分析不同施肥量是否给农作物产量带来显著影响,考察地区差异是否影响妇女的生育率,研究学历对工资收入的影响等。这些问题都可以通过单因素方差分析得到答案。 单因素方差分析的第一步是明确观测变量和控制变量。例如,上述问题中的观测变量分别是农作物产量、妇女生育率、工资收入;控制变量分别为施肥量、地区、学历。 单因素方差分析的第二步是剖析观测变量的方差。方差分析认为:观测变量值的变动会受控制变量和随机变量两方面的影响。据此,单因素方差分析将观测变量总的离差平方和分解为组间离差平方和和组内离差平方和两部分,用数学形式表述为:SST=SSA+SSE。 单因素方差分析的第三步是通过比较观测变量总离差平方和各部分所占的比例,推断控制变量是否给观测变量带来了显著影响。 原理: 在观测变量总离差平方和中,如果组间离差平方和所占比例较大,则说明观测变量的变动主要是由控制变量引起的,可以主要由控制变量来解释,控制变量给观测变量带来了显著影响;反之,如果组间离差平方和所占比例小,则说明观测变量的变动不是主要由控制变量引起的,不可以主要由控制变量来解释,控制变量的不同水平没有给观测变量带来显著影响,观测变量值的变动是由随机变量因素引起的。 基本分析步骤: 1、提出原假设:H0——无差异;H1——有显著差异 2、选择检验统计量:方差分析采用的检验统计量是F统计量,即F值检验。 3、计算检验统计量的观测值和概率P值:该步骤的目的就是计算检验统计量的观测值和相应的概率P值。 4、给定显著性水平,并作出决策 2、双因素方差分析 多因素方差分析用来研究两个及两个以上控制变量是否对观测变量产生显著影响。研究多个因素对观测变量的影响,因此称为多因素方差分析。多因素方差分析不仅能够分析多个因素对观测变量的独立影响,更能够分析多个控制因素的交互作用能否对观测变量的分布产生显著影响,进而最终找到利于观测变量的最优组合。 例如:分析不同品种、不同施肥量对农作物产量的影响时,可将农作物产量作为观测变量,品种和施肥量作为控制变量。利用多因素方差分析方法,研究不同品种、不同施肥量是如何影响农作物产量的,并进一步研究哪种品种与哪种水平的施肥量是提高农作物产量的最优组合。 进一步分析: 1、建立非饱和模型 2、均值比较分析 3、控制变量交互作用的图形分析 3、协方差分析 协方差分析将那些人为很难控制的控制因素作为协变量,并在排除协变量对观测变量影响的条件下,分析控制变量(可控)对观测变量的作用,从而更加准确地对控制因素进行评价。 协方差分析仍然沿承方差分析的基本思想,并在分析观测变量变差时,考虑了协变量的影响,人为观测变量的变动受四个方面的影响:即控制变量的独立作用、控制变量的交互作用、协变量的作用和随机因素的作用,并在扣除协变量的影响后,再分析控制变量的影响。 方差分析中的原假设是:协变量对观测变量的线性影响是不显著的;在协变量影响扣除的条件下,控制变量各水平下观测变量的总体均值无显著差异,控制变量各水平对观测变量的效应同时为零。检验统计量仍采用F统计量,它们是各均方与随机因素引起的均方比 转载于:https://www.cnblogs.com/zym-yc/p/11564739.html

python TKinter的主窗口运行程序完毕后,怎么让其自动关闭

如题: 在pycharm 调试Tkinter程序的时候,关闭右上角的X 实际上并未退出进程,长期以往 再大的内存也会被耗尽。 一般就是下面的代码: """ from tkinter import * def main(): root = Tk() b = Button(root, text='退出', command=root.quit) b.pack() mainloop() if __name__ == '__main__': main() 实际上一句代码就可以搞定: win.protocol("WM_DELETE_WINDOW", lambda: sys.exit(0)); win.protocol("WM_DELETE_WINDOW", lambda: sys.exit(0)); 转载于:https://www.cnblogs.com/dgwblog/p/11564605.html

node.js搭建本地服务器的两种方式(anywhere和http-server)

======================== node.js搭建本地服务器===================== 官网下载node.js文件并安装完成 =>> https://nodejs.org/zh-cn/download/ =============================================================== 本地运行服务器的两种简便方式 一:使用anywhere运行 1.输入npm install anywhere -g来安装anywhere,全局安装 2.cd 到需要运行的项目路径 3.输入 anywhere 回车运行 (在同一个wifi下在手机输入地址,就可以手机访问了) 二:使用 http-server 运行 1.输入 npm install http-server -g 全局安装http-server 2.cd 到需要运行的项目路径 3.输入 http-server 回车运行 转载于:https://www.cnblogs.com/hs610/p/11564247.html

$.ajax()各个参数详解

jquery中的ajax方法参数总是记不住,这里记录一下。 1.url: 要求为String类型的参数,(默认为当前页地址)发送请求的地址。 2.type: 要求为String类型的参数,请求方式(post或get)默认为get。注意其他http请求方法,例如put和delete也可以使用,但仅部分浏览器支持。 3.timeout: 要求为Number类型的参数,设置请求超时时间(毫秒)。此设置将覆盖$.ajaxSetup()方法的全局设置。 4.async: 要求为Boolean类型的参数,默认设置为true,所有请求均为异步请求。如果需要发送同步请求,请将此选项设置为false。注意,同步请求将锁住浏览器,用户其他操作必须等待请求完成才可以执行。 5.cache: 要求为Boolean类型的参数,默认为true(当dataType为script时,默认为false),设置为false将不会从浏览器缓存中加载请求信息。 6.data: 要求为Object或String类型的参数,发送到服务器的数据。如果已经不是字符串,将自动转换为字符串格式。get请求中将附加在url后。防止这种自动转换,可以查看 processData选项。对象必须为key/value格式,例如{foo1:"bar1",foo2:"bar2"}转换为&foo1=bar1&foo2=bar2。如果是数组,JQuery将自动为不同值对应同一个名称。例如{foo:["bar1","bar2"]}转换为&foo=bar1&foo=bar2。 7.dataType: 要求为String类型的参数,预期服务器返回的数据类型。如果不指定,JQuery将自动根据http包mime信息返回responseXML或responseText,并作为回调函数参数传递。可用的类型如下: xml:返回XML文档,可用JQuery处理。 html:返回纯文本HTML信息;包含的script标签会在插入DOM时执行。 script:返回纯文本JavaScript代码。不会自动缓存结果。除非设置了cache参数。注意在远程请求时(不在同一个域下),所有post请求都将转为get请求。 json:返回JSON数据。 jsonp:JSONP格式。使用SONP形式调用函数时,例如myurl?callback=?,JQuery将自动替换后一个“?”为正确的函数名,以执行回调函数。 text:返回纯文本字符串。 8.beforeSend: 要求为Function类型的参数,发送请求前可以修改XMLHttpRequest对象的函数,例如添加自定义HTTP头。在beforeSend中如果返回false可以取消本次ajax请求。XMLHttpRequest对象是惟一的参数。 function(XMLHttpRequest){ this; //调用本次ajax请求时传递的options参数 } 9.complete: 要求为Function类型的参数,请求完成后调用的回调函数(请求成功或失败时均调用)。参数:XMLHttpRequest对象和一个描述成功请求类型的字符串。 function(XMLHttpRequest, textStatus){ this; //调用本次ajax请求时传递的options参数 } 10.success:要求为Function类型的参数,请求成功后调用的回调函数,有两个参数。 (1)由服务器返回,并根据dataType参数进行处理后的数据。 (2)描述状态的字符串。 function(data, textStatus){ //data可能是xmlDoc、jsonObj、html、text等等 this; //调用本次ajax请求时传递的options参数 } 11.error: 要求为Function类型的参数,请求失败时被调用的函数。该函数有3个参数,即XMLHttpRequest对象、错误信息、捕获的错误对象(可选)。ajax事件函数如下: function(XMLHttpRequest, textStatus, errorThrown){ //通常情况下textStatus和errorThrown只有其中一个包含信息 this; //调用本次ajax请求时传递的options参数 } 12.contentType: 要求为String类型的参数,当发送信息至服务器时,内容编码类型默认为"application/x-www-form-urlencoded"。该默认值适合大多数应用场合。 13.dataFilter: 要求为Function类型的参数,给Ajax返回的原始数据进行预处理的函数。提供data和type两个参数。data是Ajax返回的原始数据,type是调用jQuery.ajax时提供的dataType参数。函数返回的值将由jQuery进一步处理。 function(data, type){ //返回处理后的数据 return data; } 14.dataFilter: 要求为Function类型的参数,给Ajax返回的原始数据进行预处理的函数。提供data和type两个参数。data是Ajax返回的原始数据,type是调用jQuery.ajax时提供的dataType参数。函数返回的值将由jQuery进一步处理。 function(data, type){ //返回处理后的数据 return data;

C盘不够了怎么办!将其他盘空间怎么分给C盘!

电脑用着用着,突然一天看到C盘红了,或者系统提示C盘满了,对系统运行会造成影响了。只靠清理缓存,最多只是暂时缓解,不是根本解决,再看看其他盘,还有很多空间,要重新分区么?不用,这里我们详细解答,如何将其他盘的空间分给C盘! 工具/原料 电脑 win7 系统 方法/步骤 1 在我的“桌面”上,找到“计算机”(XP里面叫做:我的电脑),右键点击,弹出菜单,选择“管理”并点击。 2 弹出“计算机管理”窗口,在左侧找到“存储”——“磁盘管理”,点击“磁盘管理”,再右侧就会出现整个计算机所有盘的信息。 3 这里首先看到可用“空间里面“,我的E盘可用空间最多,其次看下面信息,我的C盘和E盘都是一个磁盘0里面的,磁盘0是我的固态硬盘,分了2个区。这时我选择可用空间最大的,又是和C盘同一磁盘的。决定把E盘分点空间给C盘。 4 右键点击”E盘“,然后选择”压缩卷“。 5 等待查询压缩空间后,弹出”压缩E盘“的窗口,在”输入压缩空间量“这栏,输入想要分配给C盘的空间,但是这量不能超过上面的”可用压缩空间大小“。这里我舒服20000M(就是20G左右),然后点击压缩。 6 很快,在磁盘0(也就是我的固态硬盘)这块信息里,多了一个绿色的可分配的空间,大小为19.53G,就是我们刚刚从E盘压缩出来的大小,相对的E盘大小就相比之前减少了。 7 下面我们将这压缩出来的空间分给C盘,右键C盘,选择”扩展卷“。我们看到”扩展卷“为灰色状态,这是怎么回事。 8 这是因为我们压缩出来的绿色空间,紧靠的不是C盘,而是E盘,所以只有E盘可以”扩展卷“。因此如果压缩出来后,紧靠C盘,那么我们可以点击”扩展卷“,然后选择压缩出来的绿色空间,分配给C盘。如果和我一样,那么我们接着看怎么做。 END 下面步骤,需要删除没什么用的盘 1 因为E盘是游戏盘, 对我来说,没啥用,我可以格掉。当然,你也可以选择一个没啥用的盘压缩,(或者进行备份)然后不行可以格掉。 我们对E盘右键”扩展卷“。在”扩展卷“窗口,我们将之前压缩出来的再换给E盘。 2 然后,我们对E盘点击右键,选择”删除卷“,将E盘删除后,看到只剩C盘和绿色空间。 对C盘点击右键,”扩展卷“还是灰色的。。。。怎么办。 看来主分区只能分配到”未分配的空间“。。。 我们对绿色的可用空间,点击右键,然后选择”删除分区“。 删除后,绿色的空间,变成了黑色的未分配空间。 这个时候,我们可以将未分配的空间自由的分配给C盘。我们对C盘点击右键,然后选择“扩展卷” 再“扩展卷”窗口里面,选择我想要分配的大小,我想分配“20G”左右,输入20000。 这是C盘容量增大了,剩下的未分配空间还有60G左右。 将剩下的未分配空间,我再次新建成E盘(我的游戏分区)。对未分配空间,点击右键,选择“新建简单卷” 在弹出的窗口里,保持默认,我准备剩下的全部做E盘,所以不再调整分配大小,直接“下一步”。 驱动盘符,我还是保持原来的E盘不变,直接“下一步” “卷标”里面,我改成“游戏”。然后点击“下一步” 这样就完成了,C盘也变大了,E盘也新建了。可能跳出格式化E盘,确定快速格式化。就大功告成了!。这样才是根本的解决C盘空间,光靠清理缓存的那点空间是不够的! END 注意事项 整个过程在WIN7系统下,其他系统可能操作有所不同。 一定要仔细看完所有操作,当中可能会对资料要进行备份,不然资料丢失了就不划算了。

Hadoop需要的jar包的导入

Hadoop需要的jar包 目录:/usr/local/hadoop/share/hadoop/common hadoop-common-2.7.1.jar haoop-nfs-2.7.1.jar 目录:/usr/local/hadoop/share/hadoop/common/lib 此目录下的所有jar包 目录:/usr/local/hadoop/share/hadoop/hdfs haoop-hdfs-2.7.1.jar haoop-hdfs-nfs-2.7.1.jar; 目录:/usr/local/hadoop/share/hadoop/hdfs/lib 此目录下的所有jar包 关于通过IDEA 社区版进行jar的导入 选择那个Project Structrue在里面进行jar的导入即可。 之后就可以愉快的导入这些常用包了 import org.apache.hadoop.fs.FileSystem; import org.apache.hadoop.fs.LocatedFileStatus; import org.apache.hadoop.fs.Path; import org.apache.hadoop.fs.RemoteIterator; import org.apache.hadoop.conf.Configuration;

jquery中each函数的详细用法

each()函数是基本上所有的框架都提供了的一个工具类函数,通过它,你可以遍历对象、数组的属性值并进行处理。jQuery和jQuery对象都实 现了该方法,对于jQuery对象,只是把each方法简单的进行了委托:把jQuery对象作为第一个参数传递给jQuery的each方法.换句话 说:jQuery提供的each方法是对参数一提供的对象的中所有的子元素逐一进行方法调用。而jQuery对象提供的each方法则是对jQuery内 部的子元素进行逐个调用。 each函数根据参数的类型实现的效果不完全一致: 1、遍历对象(有附加参数) $. each(Object, function(p1, p2) { this; //这里的this指向每次遍历中Object的当前属性值 p1; p2; //访问附加参数 }, ['参数1', '参数2']); 2、遍历数组(有附件参数) $. each(Array, function(p1, p2){ this; //这里的this指向每次遍历中Array的当前元素 p1; p2; //访问附加参数 }, ['参数1', '参数2']); 3、遍历对象(没有附加参数) $. each(Object, function(name, value) { this; //this指向当前属性的值 name; //name表示Object当前属性的名称 value; //value表示Object当前属性的值 }); 4、遍历数组(没有附加参数) $.each(Array, function(i, value) { this; //this指向当前元素 i; //i表示Array当前下标 value; //value表示Array当前元素 }); 下面提一下jQuery的each方法的几种常用的用法 HTML 预览 var arr = [ "one", "two", "three", "four"]; $.each(arr, function(){ alert(this); }); //上面这个each输出的结果分别为:one,two,three,four var arr1 = [[1, 4, 3], [4, 6, 6], [7, 20, 9]] $.

iTop讯为开发板在win10环境下无法成功安装ADB Interface驱动的解决方案

最近在使用iTop的开发板时,遇到这样一个问题,在win10环境下,无法识别到ADB Interface,无法进行OTG烧写 手册里直接给了这样一张图,没有任何操作步骤 网上的资料也是特别少,后来才发现,其实这个是两个驱动放在了一个设备上。 下面,仔细说明一下: 一:ADB驱动 开发板提供的资料里面有ADB驱动,安装后,系统会将设备识别成 其他设备 Android 1.0,如下 经反复插拔测试,无法实现识别出Android ADB Interface,因为此处缺少一个Android ADB Interface驱动,此驱动可在网上下载到 二:安装Android ADB Interface驱动 右键Android 1.0设备,选择更新驱动,选择浏览我的计算机以查找驱动程序软件 选择 让我从计算机上的可用程序驱动程序列表中选取 选择设备类型为Andriod Phone 选择设备驱动程序为Andriod ADB Interface,然后浏览文件,选择Andriod ADB Interface驱动,开始安装。 安装完成 如果安装的时候提示如下问题,请参考此篇文章。 https://blog.csdn.net/wyq1805/article/details/101081879

反反爬 | 如何巧过 CloudFlare 5秒盾?

巧破 Cloudflare 5秒盾 相信下面这个界面大家都不会陌生。【图1-1】 图1-1 当我们第一次访问使用 CloudFlare 加速的网站时,网站就会出现让我们等待 5 秒种的提示,当我们需要的通过爬虫爬取这类网站的时候,应该如何爬取呢? 分析请求 首先我们需要分析在这个等待的时间里浏览器做了哪些操作。 通过抓包,我们可以看到在等待的过程中,浏览器做了下面的三次请求【图1-2】- 【图1-4】: 【图1-2】请求 1 写入 cookie 字段 __cfduid 图1-2 【图1-3】请求 2 带有疑似加密的请求参数请求并写入 cookie 字段 cf_clearance 图1-3 【图1-4】请求 3 带上前面写入的cookie 请求网站首页,返回首页内容。 图1-4 这整个过程需要的请求现在已经分析清楚了,接下来就是使用 Python 实现这个请求流程,不过是这样的话就配不上这个标题了。 先说说这个按照正常流程是怎么实现抓取绕过的: 使用浏览器模拟技术请求目标网站,例如:Selenium、 PhantomJS等 破解请求 2 的加密参数使用请求库模拟整个请求过程 这两个方法当然是可以抓取的,但是都不符合标题的巧字。 接下来给大家介绍一个专门为了绕过这个 CloudFlare 开发的 Python 库 cloudflare-scrape 用上它就可以无感爬取使用了 CloudFlare 的网站,使用这个库非常简单。 安装 使用pip install cfscrape安装cloudflare-scrape,同时确认本地是否安装node.js开发环境,如果没有,需要安装配置nodejs开发环境。 使用实例 处理 get 请求的 CloudFlare import cfscrape # 实例化一个create_scraper对象 scraper = cfscrape.create_scraper() # 请求报错,可以加上时延 # scraper = cfscrape.

[算法]PriorityQueue的应用

1. 数据流中的第K大元素 题目 设计一个找到数据流中第K大元素的类(class)。注意是排序后的第K大元素,不是第K个不同的元素。 你的 KthLargest 类需要一个同时接收整数 k 和整数数组nums 的构造器,它包含数据流中的初始元素。每次调用 KthLargest.add,返回当前数据流中第K大的元素。 示例: int k = 3; int[] arr = [4,5,8,2]; KthLargest kthLargest = new KthLargest(3, arr); kthLargest.add(3); // returns 4 kthLargest.add(5); // returns 5 kthLargest.add(10); // returns 5 kthLargest.add(9); // returns 8 kthLargest.add(4); // returns 8 说明: 你可以假设 nums 的长度≥ k-1 且k ≥ 1。 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/kth-largest-element-in-a-stream 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。 思路 建立元素为k的小顶堆,堆顶元素就是第k大的元素。 代码 import java.util.PriorityQueue; import java.util.Queue; class KthLargest { private Queue<Integer> queue; private int size; public KthLargest(int k, int[] nums) { //建立一个小顶堆 queue = new PriorityQueue<>(k); size = k; for (int i = 0; i < nums.

hive正则表达式之 regexp regexp_extract regexp_replace

1.regexp 语法: A REGEXP B 操作类型: strings 描述: 功能与RLIKE相同 select count(*) from olap_b_dw_hotelorder_f where create_date_wid not regexp '\\d{8}' 与下面查询的效果是等效的: select count(*) from olap_b_dw_hotelorder_f where create_date_wid not rlike '\\d{8}'; 2.regexp_extract 语法: regexp_extract(string subject, string pattern, int index) 返回值: string 说明:将字符串subject按照pattern正则表达式的规则拆分,返回index指定的字符。 hive> select regexp_extract('IloveYou','I(.*?)(You)',1) from test1 limit 1; Total jobs = 1 ... Total MapReduce CPU Time Spent: 7 seconds 340 msec OK love Time taken: 28.067 seconds, Fetched: 1 row(s) hive> select regexp_extract('IloveYou','I(.

ZigBee

介绍 ZigBee是基于IEEE802.15.4标准的低功耗局域网协议。根据国际标准规定,ZigBee技术是一种短距离、低功耗的无线通信技术。 这一名称(又称紫蜂协议)来源于蜜蜂的八字舞,由于蜜蜂(bee)是靠飞翔和“嗡嗡”(zig)地抖动翅膀的“舞蹈”来与同伴传递花粉所在方位信息,也就是说蜜蜂依靠这样的方式构成了群体中的通信网络。其特点是近距离、低复杂度、自组织、低功耗、低数据速率。主要适合用于自动控制和远程控制领域,可以嵌入各种设备。简而言之,ZigBee就是一种便宜的,低功耗的近距离无线组网通讯技术。ZigBee是一种低速短距离传输的无线网络协议。ZigBee协议从下到上分别为物理层(PHY)、媒体访问控制层(MAC)、传输层(TL)、网络层(NWK)、应用层(APL)等。其中物理层和媒体访问控制层遵循IEEE 802.15.4标准的规定。 参考 百度百科对ZigBee的介绍 转载于:https://my.oschina.net/surenpi/blog/604781

关于tfrecord写入和读取数据时前后维度不同的问题

samples = tf.train.batch(read_and_decode(filename_queue, pr, input_types), batch_size=32) 在生成完TFRecords,然后在通过tf.train.batch()读取的时候遇到了以下问题: OutOfRangeError (see above for traceback): FIFOQueue '_1_batch/fifo_queue' is closed and has insufficient elements (requested 32, current size 0) 然后我不通过tf.train.batch()来读,samples = read_and_decode(filename_queue, pr, input_types),又提示我如下问题: tensorflow.python.framework.errors_impl.InvalidArgumentError exception str() failed 这个问题卡了我好几个小时,然后测试的时候发现,tfrecord写入时候shape(21000,),但是读取数据的shape居然翻了4倍,(84000,)。 最开始的时候代码的时候是这样子的: 写入: snd = sound.load_sound(snd_file).normalized() # float64 samples = snd.samples[:pr.full_samples_len] # ('samples.shape:', (105000, 2)) samples = samples.reshape(samples.size, ) # 双声道转为一个声道 ('samples.shape:', (210000,)) sound_raw = samples.tostring() # 构造一个样本的example协议块 example = tf.train.Example(features=tf.train.Features(feature={ "sound": _bytes_feature(sound_raw) })) # 读取:

STM32串口通信中使用printf和USART_SendData比较

1、printf和 USART_SendData稳定性都很高。 前者实现格式化字符,字符串比较有优势,后者传送单个字符和指令比较合适。 2、在复杂的串口通信协议实现中,建议printf()用作大文本及信息显示。 涉及自定义帧头+校验的通信时,用USART_SendData实现单字符及控制命令。 3、这两个占用代码量非常小,可以忽略,除非在FLASH严格的场合,目前ST的产品FLASH容量都足够大 1、如果用作调试和串口打印,建议使用printf,这是有标准C语言定义的库函数,其稳定性、兼容性和便利性都很高。 但是它归根究底是调用USART_SendData,因此效率会稍微低一点,且编译的文件会将标准库函数都编译进去(因为调用了标准库函数的头问价,编译时其编译依赖关系要求编译真个库文件)。 2、如果是串口传送文件,或者频繁做数传,建议直接USART_SendData,效率更高,或者封装成一个函数专门做个特性的发送/接受功能,效率更高,

Html5中的画布操作之矩阵转换操作-transform()和setTransform()

矩阵转换 | transform(a, b, c, d, e, f) canvas/transform/transform.html <!DOCTYPE HTML> <html> <head> <title>矩阵转换 | transform(a, b, c, d, e, f)</title> </head> <body> <canvas id="canvas" width="400" height="400" style="background-color: rgb(222, 222, 222)"> 您的浏览器不支持 canvas 标签 </canvas> <br /> <button type="button" onclick="drawIt();">不断地点我看 Demo</button> <button type="button" onclick="clearIt();">清除画布</button> <script type="text/javascript"> var ctx = document.getElementById('canvas').getContext('2d'); var canvasScaleX = 1; var canvasScaleY = 1; var stepScaleX = 1.1; var stepScaleY = 1.1; function drawIt() {

[DEBUG] ubuntu pip安装成功却无法import

我的pip经常出问题,我也不知道为啥。。今天搞啥啥坏=。= 问题: pip自动安装显示成功,在交互环境下却无法import ==========================踩坑================================= 首先要考虑路径问题。先pip uninstall看看它装到哪里了,然后在python里看sys.path 确定是不是真的是能搜索到的。 当前pip会把包安装到 /usr/local/lib/python2.7/dist-packages 然而setuptools装在 /usr/lib/python2.7/dist-packages 这两个路径都不在我的pthon27搜索路径中。 所以就算是下载tar.gz源码(tar -zxvf)解压后python setup.py install,也会报错说找不到setuptools 解决方案: sudo vi /etc/profile 添加 export PYTHONPATH=$PYTHONPATH:/usr/lib/python2.7/dist-packages:/usr/local/lib/python2.7/dist-packages 再生效 source /etc/profile 随后在python27中可以正常import 如果只是临时更改搜索路径,那直接在sys.path上append就好了。 ============================================================================ 我是Ruriko,我爱这个世界:) 转载于:https://www.cnblogs.com/pxy7896/p/11549677.html

mtp使用教程(临时)

http://10.180.5.13:8085/mtp/login.jsp 临时登录地址,账号密码test1 登录完毕点击获取参数页面, 1.根据Remedy 做维护根据luke MTP模版,导出的线路信息的excel文件 2.维护点上传文件点击before,维护后点击after

https ssl 错误 及忽略rllib3.disable_warnings() 解释

python做爬虫,对于有的网站,需要验证证书,比如:awazon,https://awazon.com import urllib3 import requests # 导入requests urllib3.disable_warnings() session = requests.session() #SSL证书验证的方法:加参数:verify=证书路径,或verify=False 不验证ssl 默认为True response = session.get(url, headers=headers, proxies=proxies, verify=False, timeout=(3, 7)) 参考简书:http://www.jianshu.com/p/e42005d48929 rllib3.disable_warnings() 解释 requests 库其实是基于 urllib 编写的,对 urllib 进行了封装,使得使用时候的体验好了很多,现在 urllib 已经出到了3版本,功能和性能自然是提升了不少。 所以,requests最新版本也是基于最新的 urllib3 进行封装。 在urllib2时代对https的处理非常简单,只需要在请求的时候加上 verify=False 即可,这个参数的意思是忽略https安全证书的验证,也就是不验证证书的可靠性,直接请求, 这其实是不安全的,因为证书可以伪造,不验证的话就不能保证数据的真实性。 在urllib3时代,官方强制验证https的安全证书,如果没有通过是不能通过请求的,虽然添加忽略验证的参数,但是依然会 给出醒目的 Warning,这一点没毛病。 解决办法: 添加两行代码 禁用 urllib3警告

JS textarea多行文本框内容 换行

textarea多行文本 换行保存的时候,其实保存的是‘\n’,直接再读取的textarea多行文本里是没有问题的 但是要放在页面上展示,‘\n’不会换行,所以在多行文本框保存的时候,要先进行转换,'\n’转换成‘<br/>’标签,这样可以直接读取成换行展示,例如: this.InfoList[5].valueText=this.InfoList[5].valueText.replace(/\n/g,"<br/>"); 如果是还原到textarea里面,要先转化回来,textarea不会把<br/>标签识别成换行的 var reg=new RegExp("<br/>","g"); this.InfoList[5].valueText=this.InfoList[5].valueText.replace(reg,"\r\n"); 这样换行就能正常展示了

俄罗斯方块-C语言(从0开始到有色界面)

大一c语言课设写的俄罗斯方块,看了好几遍原著的源码,从0开始写并对原著进行了注释、改进与优化。原著能力很强,感谢原著自写的初版参考,原著链接:https://blog.csdn.net/lanse_l/article/details/74959248 彻底从0开始写了一遍,算是对细节有了比较深的领悟。有同样想法的朋友欢迎交流,有什么看不懂的请在下方留言,看到会及时回复。 GitHub链接:https://github.com/JellyfishMIX/Tetris.c-from-0-to-colored-interface 阅读指引(重要):1.文字说明比较长,建议先略过前半部分文字说明,直接按2.中所说的顺序看源码,看到某个自定义函数需要参考再回来看文字说明。 2.想要从0开始写的朋友,给一个思路:别的不看,先写最底部的windowsAPI。然后从main()开始入手,遇到新的自定义函数或变量,去翻源码,一点点扣源码。 3.所有用到的自定义函数、全局变量、结构体均已在main()前声明,按第一次被调用的先后顺序排列,并标明了功能注释。 “消除”发生后运行效果截图 一、摘要 目的:做一个俄罗斯方块,具有旋转功能,满一行清除功能,记录得分、最高成绩。 方法: 1. 采用了模块化的开发方式,把程序分为好几个功能模块来实现,主函数mian()只用来调用这些功能模块。 此外,各个功能模块间也有互相调用的情况。 2. 预设了宏定义DOWN LEFT RRIGHT BOX WALL KONG等,预设给其ASCII码,方便后续调用与辨识。 3. 通过blocks[base][space_z],(一维base表示7个基础方块,二维space_z表示旋转状态),叠加space[4][4],得到一个四维数组,用来预设7+7*3=28种图形。 4. 预设了一个结构体face,其中存储着face.data[][]记录BOX WALL KONG,face.color[][]记录堆叠的图形每一块的颜色。 5. 使用了c语言文件操作知识来保存/读取最高得分。 6. 为了使界面更美观,使用自定义函数hidden_cursor()隐藏了光标,使用自定义函数color控制光标输出字符的颜色。 7. 为了渲染界面,使用了自定函数gotoxy()控制光标在cmd窗口中的坐标位置。 读取键入信息,实现操作功能,利用了控制键的ASCII码,使用switch()结构选择键入控制键对应的功能模块。 二、详细说明 1. 首先对cmd运行窗口做了处理,Hide_Cursor();中调用光标相关API隐藏光标。color();中对光标键入颜色做了预设,共计6种预设颜色。编写了gotoxy(int x,int y);函数,通过COORD这一windows API控制光标在cmd窗口中的坐标位置。 2. 在开发之初先使用Inter_Face();构设了界面(地图边界WALL,操作提示信息),之后通过blocks[base][space_z],(一维base表示7个基础方块,二维space_z表示旋转状态),叠加space[4][4],得到一个四维数组,用来预设7+7*3=28种图形。 课设报告中留下的截图,不是很清晰 3. 在main();主函数中,完成了初始化界面Inter_Face();和预设28种图形Inter_Blocks();的工作,并使用srand(time(NULL));预设了随机种子,供后续调用。使用Read_File();读取最高得分记录。而游戏部分,单独交给了套在while(1)永循环中的Start_Game();来执行。 4. Start_Game()分为两部分,开头是渲染右上角下一个提示图形,第二部分是while(1),也就是左侧游戏区图形下落和堆叠 5. Start_Game();中,对于每帧刷新的实现通过如下方法实现: int t=15000;while(--t){ if (kbhit() != 0);break};停顿的时间即—t跑一万五千次+调用一万五千次kbhit()函数的时间(kbhit()是一个C和C++函数,用于非阻塞地响应键盘输入事件)。 Draw_Kong是把原图形画成空白,Draw_Blocks是在x,y位置画出图形,gotoxy(x,y)会把光标移动到cmd窗口(x,y)坐标位置, 函数Bottom()判断是否到达底部这样一直gotoxy(x,y),Draw_Blocks,Bottom判断,Draw_Kong,y++ gotoxy(x,y),Draw_Blocks,Bottom判断,Draw_Kong,y++ …… 6. 堆叠部分,使用face,data[][]和face,color[][]来保存堆叠的BOX数据。 7. 判断是否触碰底部函数Bottom(),也是在测算当前光标坐标(x,y)渲染出的blocks[base][space_z].space[4][4],如果再次y++下移,是否会与face.data[][]中的BOX或WALL重叠,如果重叠,那么把当前光标坐标(x,y)位置渲染出的blocks[base][space_z].space[4][4]中1(即图形部分),存在对应face.data[][]位置,置为BOX。 三、开发过程中遇到的问题及解决办法 1. 旋转算法,让7种基础形状变换出剩余的21种 解决办法:blocks[base][space_z + 1].space[i][j] = tem[4 - j - 1][i]; //控制一边坐标不变,另一边为4 - i - 1,然后再行列互换,这样可以保证四次旋转不同,如果仅仅行列互换,将会导致只有两种旋转状态

Visio直角连接线增加直角拐弯的方法

1、由于viaio最多只能绘制两个弯度的连接线,所以首先随便绘制一个连接线。 2、选中该连接线,然后按下shift 键同时鼠标拖动要拐弯的地方即可! 3、调整即可达到想要的任意弯度数。

uni-app导航栏配置

uni-app写app的内容会与沉浸栏重合在一起,写好好多,都是有点问题的,这次终于找到解决的方法了,与大家分享一下 最简单的解决方式就是配置mainfest.json来关闭沉浸式。即通过打开应用的manifest.json文件,切换到代码视图,在app-plus -> statusbar 下添加immersed节点并设置值为false。 "app-plus" : { "statusbar": { "immersed": false }, } App因为默认为沉浸式,去除导航栏后,页面顶部会直通到状态栏的区域,可能出现如下需求: 改变状态栏文字颜色:设置该页面的 navigationBarTextStyle 属性,可取值为 black/white。如果想单独设置颜色,App端可使用plus.navigator.setStatusBarStyle设置。部分低端Android手机 自身不支持设置状态栏前景色。改变状态栏背景颜色:通过绘制一个占位的view固定放在状态栏位置,设置此view的背景颜色,即可达到想要的效果,uni-app提供了一个状态栏高度的css变量,具体参考:uni-app内置的CSS变量。 <template> <view> <!-- #ifdef APP-PLUS --> <view class="status_bar"> <view class="top_view"></view> </view> <!-- #endif --> <view> </view> </view> </template> <script> export default { data() { return { } }, methods: { } } </script> <style> .status_bar { height: var(--status-bar-height); width: 100%; background-color: #F8F8F8; } .top_view { height: var(--status-bar-height); width: 100%; position: fixed; background-color: #F8F8F8; top: 0; z-index: 999; } </style> var(--status-bar-height) 此变量在微信小程序环境为固定 25px,在 5+App 里为手机实际状态栏高度。当设置 "

Tez安装与使用(与hive配合使用)及lzo.jar报错错误解决

1 tez介绍 tez是一个apache的开源项目,意在构建一个应用框架,能通过复杂任务的DAG来处理数据。它是基于当前的hadoop yarn之上,换句话就是yarn为其提供资源。 tez主要的两个设计目标: 增强终端用户使用: 灵活的数据流定义API 灵活的输入输出运行时模型(强调处理模型) 数据类型无关 简洁部署 高性能执行: 通过mapreduce提高性能 资源优化管理 执行时计划重定义 物理数据流的动态决策 tez可以像Apache Hive和Apache Pig这样的项目运行复杂的任务DAG,Tez可以用于处理数据,早期使用了多个MR作业,现在在单个Tez作业中 注: 天蓝色方块为map,绿色方块为reduce,云状的为输出隐藏,绿色的圆圈为一个mr。 参考官网:http://tez.apache.org/ 2 tez的安装 2.1 tez下载 tez提供咯二进制包和源码包,二者官网下载路径: https://mirrors.tuna.tsinghua.edu.cn/apache/tez/0.9.2/ 注: 官方提供咯源码包和二进制包,我这儿就不在下载源码来编译,而是直接使用其二进制包来安装。 我直接下载的apache-tez-0.9.2-bin.tar.gz这个 2.2 tez源码编译 暂时不下载源码包来编译,费时,可以自行参考官网编译。参考官网编译地址: http://tez.apache.org/install.html 2.3 tez的安装 1.解压重命名: 1.解压重命名: [root@hadoop01 ~]# tar -zxvf /home/apache-tez-0.9.2-bin.tar.gz -C /usr/local/ [root@hadoop01 ~]# mv /usr/local/apache-tez-0.9.2-bin/ /usr/local/tez-0.9.2/ 2.上传tez.tar.gz到hdfs中一个目录 注意要提前开启hadoop集群 上传tez.tar.gz到hdfs中一个目录中: [root@hadoop01 tez-0.9.0]# hdfs dfs -mkdir /tez-0.9.2 [root@hadoop01 tez-0.9.0]# hdfs dfs -put /usr/local/tez-0.9.2/share/tez.tar.gz /tez-0.9.2 1.tez.tar.gz 就是tez-0.9.2/share/ 下的

每日一题:滑动窗口的最大值 by python

题目描述: 给定一个数组和滑动窗口的大小,找出所有滑动窗口里数值的最大值。例如,如果输入数组{2,3,4,2,6,2,5,1}及滑动窗口的大小3,那么一共存在6个滑动窗口,他们的最大值分别为{4,4,6,6,6,5}; 针对数组{2,3,4,2,6,2,5,1}的滑动窗口有以下6个: {[2,3,4],2,6,2,5,1}, {2,[3,4,2],6,2,5,1}, {2,3,[4,2,6],2,5,1}, {2,3,4,[2,6,2],5,1}, {2,3,4,2,[6,2,5],1}, {2,3,4,2,6,[2,5,1]}。 代码: # -*- coding:utf-8 -*- class Solution: def maxInWindows(self, num, size): # write code here if size <= 0: return [] res = [] for i in range(0, len(num)-size+1): res.append(max(num[i:i+size])) return res

双指针算法

1. 验证回文字符串 题目 给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写。 说明:本题中,我们将空字符串定义为有效的回文串。 示例 1: 输入: "A man, a plan, a canal: Panama" 输出: true 示例 2: 输入: "race a car" 输出: false 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/valid-palindrome 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。 思路 双指针算法的基本应用,从两边向中心移动,遇到不符条件的字符跳过。 代码 class Solution { public boolean isPalindrome(String s) { if(s == null || s.length() == 0){ return true; } int left = 0, right = s.length() - 1; while(left < right){ while(left < right && !Character.isLetter(s.charAt(left)) && !Character.isDigit(s.charAt(left))) { left++; } while(left < right && !

hbase demo 版本

hbase 的架构已经很明确了,论文中已经提到了, 下面看一下,HRegion Sever架构图 0.94之前的版本 WAL: 即Write Ahead Log, 是HDFS上一个文件,早期版本中称为HLog,用以存储尚未进行持久化的数据。 所有写操作都会先保证将数据写入这个Log文件后,才会真正更新MemStore,最后写入HFile中。采用这种模式,可以保证HRegionServer宕机后,我们依然可以从该Log文件中读取数据,Replay所有的操作,而不至于数据丢失。这个Log文件会定期Roll出新的文件而删除旧的文件(那些已持久化到HFile中的Log可以删除)。 WAL文件存储在/hbase/WALs/${HRegionServer_Name}的目录中(在0.94之前,存储在/hbase/.logs/目录中),一般一个HRegionServer只有一个WAL实例,也就是说一个HRegionServer的所有WAL写都是串行的(就像log4j的日志写也是串行的),这当然会引起性能问题,因而在HBase 1.0之后,通过HBASE-5699实现了多个WAL并行写(MultiWAL),该实现采用HDFS的多个管道写,以单个HRegion为单位。 BlockCache: 是一个读缓存。在内存中存放经常读的数据,提升读性能。当缓存满的时候,最近最少使用的数据(Least Recently Used data )被踢出去。 MemStore:是一个写缓存。存储尚未写到磁盘中的数据。在写到磁盘之前,数据是经过排序的。在Region中每个column family对应一个HStore,每个HStore有一个MemStore和0到过个HFile。Hfiles :在磁盘上,用于存储排序后的数据行(KeyValues.)

Window10安装Hadoop 配置步骤

步骤目录 为Hadoop准备Java环境下载Hadoop添加Hadoop到系统变量 Hadoop配置etc/hadoop/core-site.xmlhdfs-site.xmlyarn-site.xmlmapred-site.xmlhadoop-env.cmd 测试运行格式化HDFS启动! 题前话:Hadoop官方认定Hadoop环境最好还是运行在Ubuntu系统上,由于笔者比较倾向在Win上面做开发,所以就先装在Window10上了。 为Hadoop准备Java环境 由于Hadoop运行需要Java1.8.0以上的环境,请先自行下载Java并添加入系统环境变量JAVA_HOME如果在CMD中输入java、javac出现如下提示则表名java环境已经准备好了。 下载Hadoop hadoop下载地址 解压到你想解压的地方就完事。图片是旧的,现在已经使用3.x了 添加Hadoop到系统变量 Hadoop配置 进入hadoop的安装目录,修改以下文件 etc/hadoop/core-site.xml <configuration> <!-- 在哪台机器启动hdfs文件系统 --> <property> <name>fs.defaultFS</name> <value>hdfs://Devil:9000</value> <!--这里Devil务必替换成你的管理员名称--> </property> <!--hadoop产生的临时文件放到哪里--> <property> <name>hadoop.tmp.dir</name> <value>file:/D:/bigDatatest/da/hadooptmp</value> </property> </configuration> hdfs-site.xml 这里需要建立存放namenode和datanode的文件夹,可自行选择位置创建,无所谓名称、位置,你喜欢就好,但不能没有。 <configuration> <!--hdfs的备份因子,1就是只有一个备份。也就是只有一份--> <property> <name>dfs.replication</name> <value>1</value> </property> <!-- hdfs集群的名称 --> <property> <name>dfs.nameservices</name> <!-- hdfs集群的名称可以随意取 --> <value>hadoop-cluster</value> </property> <!-- 配置nameNode第二节点的位置--> <property> <name>dfs.namenode.secondary.http-address</name> <value>Devil:50090</value> </property> <!-- hdfs集群web访问的地址, 这句不配置访问的路径就是localhost:9870--> <!--<property> <name>dfs.http.address</name> <value>Devil:9870</value> </property>--> <!-- hdfs集群上 块的大小 --> <property> <name>dfs.blocksize</name> <value>32m</value> </property> <!-- hdfs集群的namenode(主节点) 运行过程中的中间数据存放位置 --> <property> <name>dfs.

linux处理pdf工具pdftk(centos7.4 安装pdftk)

第一步:安装依赖 yum install gcc gcc-c++ libXrandr gtk2 libXtst libart_lgpl 第二步:安装libgcj,由于用镜像找不到它只能手动下载 wget http://mirror.centos.org/centos/6/os/x86_64/Packages/libgcj-4.4.7-23.el6.x86_64.rpm rpm -ivh --nodeps libgcj-4.4.7-23.el6.x86_64.rpm 第三部:安装PDFtk wget https://www.pdflabs.com/tools/pdftk-the-pdf-toolkit/pdftk-2.02-1.el6.x86_64.rpm yum install pdftk-2.02-1.el6.x86_64.rpm 打开terminal输入 which pdftk 就可以看到/usr/bin/pdftk证明已经安装成功了.