本文转载在我的微信公众号:古德曼汽车工业。
希望关注本专栏的朋友,也能一并关注微信公众号。
分治算法求螺丝螺母匹配问题 一、问题描述: 有个大小不同的螺丝和与之匹配的n个螺母, 你可以尝试一个螺丝和一个螺母是否匹配, 尝试结果有三种:(1)螺丝太大;(2)匹配成功;(3)螺母太大. 请设计一个分治算法完成所有螺丝和螺母的匹配
二、算法求解: 1、算法思路: 边界条件:当只有一个螺丝和一个螺母时,匹配螺丝和螺母。
Divide:在杯子集合中随机选择一个螺丝x, 将x与所有螺母进行匹配,把结果为螺丝太大的螺母放入G1, 把结果为螺母太大的螺母放入G2, 找到和x匹配成功的螺母记为y。将y与x以外所有杯子进行匹配,把结果为螺母太大的螺丝放入B1, 把匹配结果为螺丝太大的螺丝放入B2。
Conquer:递归地对B1和G1、B2和G2进行匹配。
Merge:返回B1和G1、B2和G2的匹配结果以及(x, y)。
2、算法伪代码: Match(B, G)
Input: 螺丝集合B, 螺母集合G, |B|=|G|=n, B中每个螺丝都只和G中一个螺母匹配成功
Output: {(x, y)| x∈B, y∈G, x与y匹配成功}
if |B|=1return BG;初始化B1, B2, G1, G2, M=; y=NIL;随机选择螺丝集合B中的一个元素x;for Gif g和x的匹配结果为“螺丝太大”令G1=G1{g};else if g和x的匹配结果为“螺母太大”G2=G2{g};else {y=g;M=M{(x, y)};}for B/{x}if y和b的匹配结果为“螺母太大”B1=B1{b};else if g和x的匹配结果为“螺丝太大”B2=B2{b};if B1M=MMatch(B1, G1);if B2M=MMatch(B2, G2);return M; 3、算法时间复杂度分析: 记算法时间复杂性T(n)。 将x与所有螺母匹配代价为O(n); 将y与x以外所有螺母匹配的代价为O(n); 综上, 划分代价为O(n)。Conquer 代价为T(|B1|)+T(n-1-|B1|), 其中|B1|为0、1、…、n-1的概率都是1/n。Combine(Merge)代价不计(算法的时间复杂性用匹配尝试的次数来衡量)。 总体代价与快速排序相同, 最坏情况为O(n2); 期望为O(nlogn)。
实验室刚买了台服务器,刚装完系统(ubuntu server 20.10),配置ssh账号的时候,安装openssh-server时出现了两个错误
The list of sources could not be read.package has no installation candidate 执行sudo apt install openssh-server时,出错:
package openssh-server has no installtion candidate
当然下载其他包的时候也会出现类似的问题。出错为:
package “packagename” has no installion candidate
出错原因: 最开始出现的问题为:The list of sources could not be read.因为不知道问题出现在哪,网上的一部分文章说是因为/etc/apt/sources.list中部分指令出错,我不知道哪条指令出错了,就全注释了(我真是个天才!!!错误示范,请勿模仿),网上还有建议删掉的。嘶~
我全注释了,但是,但是,哎没错了 ,但众所周知,错误不会消失,只会转移。这时候,错误就变成了另外一个,就最开始提到的:package openssh-server has no installtion candidate。
这时候出错原因有两个:
没有更新apt的下载源文件/etc/apt/sources.list 出现错误 这个服务器的问题肯定是第二个了,毕竟把人家都掏空了…
1.没有更新apt的下载源 这个问题比较简单,网上也有很多这样问题的解决办法:
# apt-get update # apt-get upgrade # apt-get install <packagename> 主要更新软件包和软件源
如果执行完此条指令还不行的话,可能是软件源文件/etc/apt/sources.list出错了
2. 文件/etc/apt/sources.list 出错 本台服务器系统为ubuntu server 20.
文尾左下角阅读原文看视频教程
好课推荐:
1、CAD2014:点击查看 2、室内CAD: 点击查看 3、CAD2019:点击查看 4、CAD2018: 点击查看 5、Bim教程:点击查看 6、室内手绘: 点击查看 7、CAD三维:点击查看 8、全屋定制: 点击查看 9、ps cc2019:点击查看 10、MAC版CAD: 点击查看 11、3dmax教程:点击查看 12、UG教程: 点击查看 13:SU教程:点击查看 14.solidworks教程:点击查看
更多视频教程:点我查看
室内CAD施工图特训营,欢迎加入:点我报名
之前也发过不少批量打印的插件以及文章,今天再推荐一个非常好用而且免费更加智能的批量打印插件,插件下载链接:http://www.cadzxw.com/40850.html,安装非常简单,电脑多少位安装多少位即可,全是下一步。
安装完成后点击菜单栏M_批打印,批量打印到文件(通用型),其他功能自行研究吧,也可以设置快捷键;
提示选择打印范围;
框选图纸回车即可;
回车之后会弹出批量打印至文件对话框;
注:
1、可单击预览小眼睛图标,预览单张图纸;
2、单击文件名可单个修改文件名;
也可批量修改命名规则;
3、不想打印的可点删除;
4、可修改纸张大小;
可修改比例;
以及纸张尺寸;
当然一般我们也不需要改,都可以自动识别;
5、再设置下其他参数,尤其后面这个合并为一个文件,非常实用哦;
6、打印中;
7、打印完成。
完,今天的分享就到这,感谢阅读。
CAD自学网官方视频号,关注,每天分享一个CAD视频小技巧!
END 一个有态度、有料的设计分享站CAD自学网微信号:cadzxw 点此进入查看更多视频课程 CAD大神都在看
TypeScript 安装nvm
安装完成后有npm 和node工具
01.TypeScript开发环境安装 npm install typescript -g
vi demo.ts function jspang() { let web: string = "Hello World"; console.log(web); } jspang(); 这时候你使用node demo.ts是执行不成功的,因为 Node 不能直接运行TypeScript文件,需要用tsc demo.ts转换一下,转换完成后typeScript代码被编译成了javaScript代码,新生成一个demo.js的文件,这时候你在命令行输入node demo.js,在终端里就可以顺利的输出jspang的字符了。
执行失败
node demo.ts
先执行
tsc demo.ts
后执行
node demo.js
但是这样操作的效率实在是太低了,你可以使用ts-node插件来解决这个问题,有了这个插件,我们就不用再编译了,而使用ts-node就可以直接看到编写结果。
npm install -g ts-node
ts-node demo.ts
02.TypeScript 的静态类型 TypeScript 的一个最主要特点就是可以定义静态类型,英文是 Static Typing。那到底是什么意思那?你可以简单的理解“静态类型”为,就是你一旦定义了,就不可以再改变了。
定义静态类型 给变量count定义number数据类型
vi demo.ts function jspang() { const count: number = 1; console.log(count); } jspang(); 自定义静态类型 给变量xiaohong定义了自定义的Person接口类型,变量xiaohong即有固定和属性name和age,不能变了。
vi demo.
电子档资料下载
点击文章底部【阅读原文】
FANUC双安检功能及维修案例
编写人:李萌
应用、适用范围
为了增加机床的安全性及符合欧洲安全标准,将安全相关的一些功能整合在系统中,通过两个独立的通道,单独监控例如安全相关的 IO 信号,电机速度、机床位置等,并且两路数据之间互相校验,确保一个单独的错误不导致整个安全功能失效,实现双安检功能。
系统信息:(配置、状态、设置)
16i/160i/160is-MODEL B
18i/180i/180is-MODEL B
21i/210i/210is-MODEL B
配置有 FSSB I/O 模块:
A02B-0236-C211(基本模块)
A02B-0236-C212(扩展模块)
双安检功能为选择功能,需要购买系统时订购。另外需要参数开通该功能。
参数1902#6=1 使用双安检功能。
参数1902#6=0 禁用双安检功能。
基本原理:
双安检功能通过 2 个或多个独立的 CPU,构建 2 个通道,分别检测和安全相关的数据,并且这两路数据之间相互校验,检测可能出现的错误,在出现错误时通过两个独立的通道切断电源。伺服电机位置编码器将反馈脉冲发送给伺服放大器,放大器再通过FSSB 送给 CNC。CNC 中通过 CNC CPU 和 servo CPU 单独接收反馈数据。主轴也是如此, CNC通过 CNC CPU 和 spindle CPU 单独接收数据。双安检功能软件监控这两路数据,一旦检测出错误,输出信号也通过这两个通道切断 MCC。同样,作为检测门开关等状态的输入信号,也是相同原理。
硬件构成:
主要增加了 FSSB I/O 模块单元,以及 i 系列 CNC 具有 MONITOR-DSP。
双安检功能介绍:
双安检主要功能包括:安全相关 I/O 信号监视、安全速度监视、机床安全位置监视、MCC通断测试、安全位置开关信号、用户可编程 I/O 信号。
1、安全相关的 I/O 信号监控。
Q0.创建删除用户:
--SQL Server 服务器级别,创建登陆帐户(create login) create login lina with password='123456', default_database=TCPH --为登陆账户创建数据库用户(create user) create user lina for login lina with default_schema=dbo --彻底删除用户 EXEC sp_dropuser 'lina' EXEC sp_droplogin 'lina' Q1.创建删除模式:
--创建一个模式TPCHDEMO,并在模式中创建表和视图 CREATE SCHEMA TPCHDEMO CREATE TABLE TPCHDEMO.part(p_partkey int,p_name varchar(22),p_category varchar(7)); CREATE VIEW TPCHDEMO.part_view AS select p_name,p_category from part where P_PARTKEY<200; --删除模式,先删除下属的数据库对象 drop table TPCHDEMO.part drop view TPCHDEMO.part_view drop schema TPCHDEMO Q2.模式转移
--模式转移 CREATE SCHEMA temp CREATE TABLE users(id INT,username VARCHAR(30)) ; --将temp模式下的users表转让给TPCHDEMO模式 CREATE SCHEMA TPCHDEMO ALTER SCHEMA TPCHDEMO TRANSFER OBJECT::temp.
【每日一题】排序子序列(波峰波谷问题) 文章目录 【每日一题】排序子序列(波峰波谷问题)1、题目来源2、题目描述3、输入/出描述4、示例5、解题思路5.1 非递增非递减序列5.2 访问边界的确定5.2.1 越界问题5.2.2 波峰波谷问题 6、代码展示 1、题目来源 牛客网:排序子序列
2、题目描述 牛牛定义排序子序列为一个数组中一段连续的子序列,并且这段子序列是非递增或者非递减排序。牛牛有一个长度为n的整数数组A,他现在有一个任务是把数组A分为若干段排序子序列,牛牛想知道他最少可以把这个数组分为几段排序子序列.
如样例所示,牛牛可以把数组A划分为[1,2,3]和[2,2,1]两个排序子序列,至少需要划分为2个排序子序列,所以输出2
3、输入/出描述 输入:
输入的第一行为一个正整数n(1 ≤ n ≤ 10^5)
第二行包括n个整数A_i(1 ≤ A_i ≤ 10^9),表示数组A的每个数字。
输出:
输出一个整数表示牛牛可以将A最少划分为多少段排序子序列
4、示例 输入:
6
1 2 3 2 2 1
输出:
2
5、解题思路 题目中定义的排序子序列需要满足以下两个条件:
(1) 连续的
(2) 非递增或者非递减排序
5.1 非递增非递减序列 1,2,3,4,5 //递增排列 9,8,7,6,5 //递减排列 1,2,3,3,4,5,8,8 //非递减排列 9,8,7,7,6,5,5,2,1 //非递增排列 [
5.2 访问边界的确定 遍历数组,拿到数组的元素a[i]后,与它的左右邻进行比较,符合非递增非递减序列,就将排序子序列的计数+1。这里需要注意以下两点的问题。
5.2.1 越界问题 5.2.2 波峰波谷问题 6、代码展示 (1)C语言实现
#include<stdio.h> int main() { int array[100000]; //n个元素,下标0~n-1 int i,n,flag=0,res=1; //输入第一行的正整数n scanf("
node开发一个接口详细步骤
最近在做后台管理系统,用于毕业答辩,自己用nodejs写了个简单的接口。
这里用的是nodejs+mysql的
nodejs和mysql的安装这些基础略过。
首先创建文件夹。cd 进入文件。
npm init 进行初始化
安装下面的包
npm install body-parser express mysql cors -S
这里下载mysql是操作mysql数据库的一个js插件,并不是数据库软件
下面一步步进行操作
文章最后也展示出来了页面最后效果。不想一步步跟着做的,可以直接看文章最后,当然还是希望大家跟着走一遍,可以加深印象。
首先创建程序的入口文件 index.js
const express = require('express') const app = express() app.listen(8088, () => { console.log('服务启动') }) app.get('/', (req, res) => { res.send('<div>hello world</div>') }) res.json 以json对象的形式返回去 res.send 以也页面的形式返回去 res.download以文件的方式返回去,前端请求会下载此文 运行 server.js测试get请求
在package.json中配置 “start”: “hotnode index.js”
hotnode 需要安装
npm i hotnode -g
hotnode然后运行 npm start就可以了
这个插件可以让你的node程序热更新
当然 nodemon index.js也可以
nodemon 也需要安装 npm i nodemon -g
默认情况下,tomcat网站页面的文件存放在webapps目录的ROOT下,如果需要自定义路径可以按以下几种方式进行配置:
实验一:
在虚拟主机配置中添加Context path等内容当docBase为空时,访问页面会直接在web_b目录中
echo “web_b/test.html” > web_b/test.html //创建测试页
重启tomcat服务
http://www.b.com:8080/test.html //测试,看到的是web_b中的页面,而不是web_b/ROOT下
实验二:
当docBase=”bbb”时,访 问页面会在web_b/bbb目录中
[root@web1 tomcat]# mkdir web_b/bbb 创建测试目录
echo “web_b/bbb/index.html” > web_b/bbb/index.html 创建测试页面
重启tomcat服务
www.b.com:8080 访问测试,看到的是web_b/bbb中的页面
实验三:
当docBase=”/b”时,访问页面会在/b目录中
[root@web1 tomcat]# mkdir /b 创建测试目录
[root@web1 tomcat]# echo " /b/index.html" > /b/index.html 创建测试页面
重启tomcat服务
www.b.com:8080 访问测试,看到的是/b中的页面
实验四:
当context path=”/abc”时,docBase=”/b”时,访问页面www.b.com:8080/abc/ 会显示/b目录中的页面
重启tomcat服务
www.b.com:8080/abc/ 访问测试,看到的是/b中的页面
www.b.com:8080 访问测试,看到的是web_b/ROOT中的页面
ss -ntulp | grep java
实验五:
当context path=”/abc”时,docBase=”bbb”时,访问页面www.b.com:8080/abc/ 会显示web_b/bbb/目录中的页面
重启tomcat服务
curl www.b.com:8080/abc/ 访问测试,看到的是web_b/bbb/中的页面
curl www.
格式化打印函数:printf
格式:[root@www ~]printf ‘打印格式’ 实际内容
打印格式: \b 退格键 \f 清楚屏幕 \n 输出新的一行 \r enter键 \t 水平制表键 \v 垂直制表键 \xMN MN为数字,将MN转换成字符 变量格式: %n 代表数字 %s 代表字符 %i 代表整数 %f 代表小数 大栗子:
准备的操作内容:printf.txt
格式化输出1:
因为第一行的英文字符比较长,所以会出现不对其的情况。
格式化输出2:
规定每个显示的长度,但这样就没办法显示出两行是不同类型的情况了。
例如问题:从 arr 数组中提取所有奇数元素。
input:arr = np.array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
output: #> array([1, 3, 5, 7, 9])
Solution:
#Input
>>> arr = np.array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
#Solution
arr = arr[arr % 2 == 1]
>>> array([1, 3, 5, 7, 9])
这是对奇数元素的提取,其他条件同理,在这个问题上我们深入再学习一下,首先 numpy 中的 array 数组是可以直接对数组中的每个元素进行处理的。例如我们想对每个元素减一:
#input
>>> arr = np.array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
在这篇文章中,我们将使用iloc和loc来处理数据。更具体地说,我们将通过iloc和loc例子来学习切片和索引。
一旦我们将一个数据集加载为Pandas dataframe,我们通常希望根据某些条件开始访问该数据的特定部分。例如,如果我们的数据集包含比较不同实验组的实验结果,我们可能需要分别计算每个实验组的描述性统计。
更多有关对Pandas dataframes进行分组的内容
如何在Python中进行描述性统计
根据某些标准选择数据的特定行和列的过程通常称为切片。
Pandas Dataframe 在我们学习如何使用loc和iloc之前,我们最好先了解一下Pandas dataframe对象是如何工作的。对于本索引和切片教程的特定目的,我们最好知道dataframe中的每个行和列都有一个数字——一个索引。
这种结构是带有数字索引的行和列结构,这意味着我们可以使用行号和列号来处理数据。这在我们准备使用Pandas loc和iloc方法的时候是非常有用的。
请参阅博文《使用Pandas和pyjanitor——了解一些简单的Python数据清理方法》。
Data 在下面的iloc和loc例子中,我们将使用两个数据集。这些数据集,在许多其他的RDataset中,可以在这里找到,但是下面的代码将把它们加载到Pandas dataframe中:
如果您有兴趣学习更多有关Pandas数据处理的知识,请查看以下文章:
如何将CSV文件读入Pandas
如何将Excel文件读入Pandas
将SPSS文件读入Pandas 使用Python和Pandas处理JSON文件
loc 和 iloc之间有什么不同? 在继续使用Pandas iloc和Pandas loc之前,我们将回答有关loc和iloc之间的区别的问题。
首先,.loc是一个基于标签的方法,而.iloc是一个基于整数的方法。这意味着当我们对dataframe进行切片时,loc将考虑索引的名称或标签。
Pandas loc 示例链接
例如,如果“case”在一个dataframe(例如,df)的索引中,那么df.loc['case']将导致第三行被选中。注意,在下面的loc和iloc例子中,我们将使用数据集中的第一列作为索引(参见第一个代码块)。
另一方面,Pandas .iloc会根据索引的位置进行切片。与.loc不同,.iloc的行为类似于常规的Python切片。也就是说,我们只需要指定位置索引数字,就会得到我们想要的切片。
例如,df.iloc[2]会为我们提供dataframe的第三行。这是因为,就像在Python中一样,.iloc是基于0位置的,也就是说,它从0开始。我们将在下面的文章中学习如何使用loc和iloc。
iloc在Pandas中能做什么? 如前所述,Pandas iloc主要基于整数位置。也就是说,可以使用0到长度-1来对一个dataframe建立索引,无论它是行索引还是列索引。
此外,正如我们将在后面的Pandas iloc 例子中所看到的,该方法也可以与一个布尔数组一起使用。
在这个Pandas iloc教程中,我们将使用以下输入方法:
一个整数,例如2
一个整数列表,例如 [7, 2, 0]
一个带有整数的切片对象,例如0:7, 如上图所示
一个布尔型数组。
如何使用Pandas iloc 现在您可能想知道“如何使用iloc?”,当然,我们会回答这个问题。以最简单的形式,我们只需在括号中键入一个整数。
正如您在上面的Pandas iloc例子中所看到的,我们在iloc方法之后键入了一组方括号。
此外,我们还添加了一个整数(0)作为索引值,以指明我们想要获取我们的dataframe的第一行。注意,在使用.iloc时,一定要知道方括号内索引的顺序显然很重要。
第一个索引号将是我们要检索的行。如果我们要检索一个特定的列,或者某些特定的列,使用iloc,我们会输入第二个索引(或多个索引)。但是,这是可选的,并且没有第二个索引时,iloc将默认检索所有列。
如前所述,Pandas iloc语法是: DataFrame.iloc[,]。
这可能会让R统计编程环境的用户感到困惑。要进行迭代,我们可以使用Pandas中的iloc方法来以行和列在dataframe中出现的顺序按数字选择它们。
>>> 今日签到口令:ipd5 <<<
Pandas iloc 例子 在下一节中,我们将通过查看如何使用iloc的不同例子来继续这个Pandas 索引和切片教程。当然,我们已经从最基本的方法开始了;即选择单个行:
关于这个问题,其实很多同学都会有疑问,因为在论文中是一系列的公式展开,其实并不是很好理解。 关于BN 其实BN操作的目地是使一批feature map 进行归一化,避免数据过大而导致网络性能的不稳定。我记得网有一篇博文中对BN有较详细的介绍,大概意思就是,输入数据经过若干层的网络输出其实会让数据特征分布和初始分布不一致,降低模型的泛化性能,引入BN机制后,先将特征变为标准正态分布,然后再通过γ和β两个参数将标准正态分布适当拉回归一化前的分布,相当于在原分布和标准正态分布进行折中,以此增强模型的泛化性。
BN的运算过程 这里假设特征图的格式为 (N,C,H,W) 类型,这里假设为 (2,2,2,2)类型的,比如下图,上下为两个通道,横向为两个特征图,每个特征图为 2*2 ,经过 BN后,最终结果为 右半部份。具体计算公式为:
即最终计算的时候,是将特征图中,同一批次中,按照通道进行归一化,每个样本的不同通道间是没什么关系的,不同样本的相同通道是符合同一个正态分布的。
Pytorch中的nn模块中的BatchNormal2d函数的实验 import torch import torch.nn as nn #num_features - num_features from an expected input of size:batch_size*num_features*height*width #eps:default:1e-5 (公式中为数值稳定性加到分母上的值) #momentum:动量参数,用于running_mean and running_var计算的值,default:0.1 input=torch.randn(2, 2, 3, 4) # 生成一个三维矩阵,bitch_size=2, C=2, H=3, W=4 m=nn.BatchNorm2d(2, affine=True) # 2为输入的通道数,affine参数设为True表示weight和bias将被使用,即 gamma 和 Beta output=m(input) # 批正则化变换 print(input) print(m.weight) # gamma print(m.bias) # Beta print(output) print(output.size()) 使用计算公式计算 print(input[:,0]) firstChannelMean=torch.Tensor.mean(input[:,0])#求2个样本第一通道的平均值 firstCVar=torch.Tensor.var(input[:,0],False)#求2个样本第一个通道的方差 batchNor=((input[0][0][0][0]-firstChannelMean)/(torch.pow(firstCVar,0.5)+m.eps))*m.weight[0]+m.bias[0] #普通的公式 print(batchNor) # 输出该位置对应的BN结果 以上即为BN操作的具体过程,想必会对您有一定的帮助!
一、安装 1. 下载软件包 image.png
image.png
image.png
2. 安装 image.png
接下来手动编辑一个指定路径,用于存放安装的程序文件 路径会被自动创建
image.png
image.png
接下来全部打勾 √
二、基本配置 1. 安装中文简体插件 image.png
image.png
2. 设置字体大小 image.png
配置文件模式 image.png
按如下内容进行编辑配置,没有的添加,有的修改
{ // 终端字体大小 "debug.console.fontSize": 30, "markdown.preview.fontSize": 30, "terminal.integrated.fontSize": 30, "editor.fontSize": 30, "window.zoomLevel": 0, "workbench.iconTheme": "vscode-icons", "vsicons.dontShowNewVersionMessage": true, "git.ignoreLegacyWarning": true, "python.pythonPath": "D:PythonPython37python.exe", "code-runner.runInTerminal": true, "files.autoSave": "afterDelay"} 或者图形模式一步一步配置 image.png
3. 设置自动保存编辑的文件 image.png
image.png
image.png
三、安装必要的插件 vscode-icons 让 vscode 资源树目录加上图标
image.png
image.png
Python 支持 Python 语法
本文首发于微信公众号“ 生信补给站 ”,期待您的关注!!! "一张统计图形就是从数据到几何对象(geometric object, 缩写为geom, 包括点、线、条形等)的图形属性(aesthetic attributes, 缩写为aes, 包括颜色、形状、大小等)的一个映射。此外, 图形中还可能包含数据的统计变换(statistical transformation, 缩写为stats), 最后绘制在某个特定的坐标系(coordinate system, 缩写为coord)中, 而分面(facet, 指将绘图窗口划分为若干个子窗口)则可以用来生成数据中不同子集的图形。" ----- Hadley Wickham 一 ggplot2 背景介绍 ggplot2是由Hadley Wickham创建的一个十分强大的可视化R包。按照ggplot2的绘图理念,Plot(图)= data(数据集)+ Aesthetics(美学映射)+ Geometry(几何对象)。本文将从ggplot2的八大基本要素逐步介绍这个强大的R可视化包。
数据(Data)和映射(Mapping)几何对象(Geometric)标尺(Scale)统计变换(Statistics)坐标系统(Coordinante)图层(Layer)分面(Facet)主题(Theme) 二 数据(data) 和 映射(Mapping) 数据:用于绘制图形的数据,本文主要使用经典的mtcars数据集和diamonds数据集子集为例来画图。
#install.packages("ggplot2") library(ggplot2) data(diamonds) set.seed(1234) diamond <- diamonds[sample(nrow(diamonds), 2000), ] head(diamond) 映射:aes()函数是ggplot2中的映射函数, 所谓的映射即为数据集中的数据关联到相应的图形属性过程中一种对应关系, 图形的颜色,形状,分组等都可以通过通过数据集中的变量映射。
#使用diamonds的数据子集作为绘图数据,克拉(carat)数为X轴变量,价格(price)为Y轴变量。
p <- ggplot(data = diamond, mapping = aes(x = carat, y = price)) #将钻石的颜色(color)映射颜色属性:
p <- ggplot(data=diamond, mapping=aes(x=carat, y=price, shape=cut, colour=color))p+geom_point() #绘制点图 #将钻石的切工(cut)映射到形状属性:
很多小伙伴在后台私信小编,想知道如何将手机/电脑上的内容投屏到电视。今天,我们就独家奉上「小米电视投屏教程」,教你玩转电视,秒变科技达人!
手机镜像投屏 如果你使用的是小米手机投屏,只需两步:
①首页点击遥控器菜单键,找到快速投屏。
②打开小米手机的“相机”或者“扫一扫”,扫描电视页面中的二维码,即可连接电视。
如果你使用的是其他安卓手机投屏:
①在手机上安装「电视超人」,将手机和电视连接到同一WIFI。
②选择【发现设备】中你想投屏的电视。
③点击工具,手机画面投屏。
如果你使用的是苹果手机投屏:
①将手机和电视连接同一个WiFi。
②从手机屏幕上方向下拖拽,拉出控制中心,点击“屏幕镜像”。
③选择你想投屏的电视。
电脑镜像投屏 如果你使用的是小米笔记本投屏:
①首页点击遥控器菜单键,找到快速投屏。
②在小米笔记本上按F6键,选择“连接到无线显示器”。
③选择你想投屏的电视。
如果你使用的是其他Windows电脑投屏:
①首页点击遥控器菜单键,找到快速投屏。
②打开电脑右下方的操作中心,选择投影。
③选择连接到无线显示器,选择你想投屏的电视。
如果你使用的是苹果电脑投屏:
①将电脑和电视连接同一个WiFi。
②打开「系统偏好设置」,进入「显示器」。
③在「隔空播放」下拉框中选择需要镜像的电视。
APP直接投屏 手机视频APP,支持将视频源投屏到电视:
①将手机和电视连接同一个WiFi。
②打开播放你想投屏的内容,点击右上方按钮。
③点击TV投屏图标,选择你想投屏的电视。
具体操作界面以实际使用APP为准
有的时候我们的电脑网络很容易就出现了问题,就拿电脑的网络连接出现红叉而言,它就容易出现红叉的情况,网络连接出现红叉怎么办,网络连接红叉如何解决?
以下是网络连接红叉的解决方法:
方法一:
1、先检查网线是否插好。
2、重启路由器,然后重启电脑,看看是否有网。
3、检测一下IP地址是否正确。
4、以上均没有用的话,建议重装网卡驱动。
方法二:
1、鼠标右键点击“计算机”,选择“设备管理器”
2、找到"网络适配器“并点击它
3、对网卡进行更新,然后看是否能连接上网络
方法三:
1、在电脑桌面的最右下端找到网络的图标
2、点击"打开网络和共享中心”
3、点击“更改适配器”
4、尝试设置其他的联网方式连接网络
win7系统网络连接显示红叉的解决方法
1、检查网线与电脑的连接是否有问题。
2、如果确认网络与电脑的连接没有问题,返回电脑桌面,在开始菜单中找到“运行”选项,并输入“dcomcnfg”字样后按确定。
3、进入到组件服务界面。
4、依次点击“组件服务”、“计算机”、“我的电脑”、“DCOM配置”这些选项,最后找到“netprofm”。
5、找到“netprofm”后右键属性,在新出来的界面导航中选择“安全”,并选中“启动和激活权限”下方的自定义,随后点击旁边的“编辑”按钮,在“添加”中“输入对象名称来选择”选项输入“LOCAL SERVICE”字样,最后按确定即可。
6、返回到界面后,这时我们还要注意本地启动和本地激活这两个选项有没有勾选。
7、最后我们还要在输入“dcomcnfg”字样后按确定出现的界面中,从“服务”这个选项找到“Network List Service”,进行启动即可。
win10系统网络连接显示红叉的解决方法
一、启动DHCP Client
1、【win+R】调出运行,运行搜索中收入下【services.msc】,接着点【确定】,
2、我们就要看下这个【DHCP Client】是否在运行,如图。
3、假如不在的话,我们就要双击下,启动它。
二、确认使用者权限
1、接着我们一样的启动下运行框,输入【dcomcnfg】,点【确定】。
2、我们双击下【计算机】,就进入到了【我的电脑】界面。
3、在【我的电脑】,我们一样的双击下,双击选择下【DCOM配置】,如图。
4、我们接着就在里面找到【netprofm】,单击下选择【属性】。
5、接着选择下【安全】,看到【启动与激活权限】,设置为【自定义】,选择users,点下【高级】。
6、我们就可以查看到,所有用户权限开启了。
三、确认Network List Service是否工作
打开运行框,再次输入下【services.msc】,接着点【确定】,,我们就查看下这个【Network List Service】是否开启,开启了,重新连接网络就OK的。
win7网络连接出现红叉但能上网如何解决
1、 找到桌面上的计算机图标,选择并右击它,然后在弹出的各项中选择并点击“管理”;
2、之后弹出计算机管理窗口,我们在窗口的左边栏依照计算机管理(本地)、系统工具、性能往下找,在性能下面我们会看到有“设备管理器”,我们选择并单击这个“设备管理器”;
3、然后在计算机窗口的右边栏会弹出设备管理器的具体分支项,我们找到“网络适配器”并点击它前面的三角形图标来展开这个“网络适配器”;
4、接下来我们会看到“网络适配器”下面有网卡的驱动程序,我这里有两个,我们先右击第一个网卡驱动程序选择并点击卸载,之后会弹出确认设备卸载的对话框,我们只用点击确定按钮,“删除此设备的驱动程序软件。”前的方格禁止点击。如果经过此操作后网络适配器下还有其他网卡驱动程序,还是按照这种方法卸载它们;
5、最后先点击计算机管理窗口下的菜单项-“操作”,再在弹出的选项中选择并点击“扫描检测硬件改动”。然后我们会发现电脑正在重新安装刚才卸载掉的网卡的驱动软件。当网卡的驱动软件安装成功后,我们会发现电脑的网络连接图标上的红叉消失了!这个问题至此成功地解决了。
作者:Nathan Hubens
编译:ronghuaiyang
来自:AI公园
导读
如何去掉batch normalization层来加速神经网络。
介绍 Batch Normalization是将各层的输入进行归一化,使训练过程更快、更稳定的一种技术。在实践中,它是一个额外的层,我们通常添加在计算层之后,在非线性之前。它包括两个步骤:
首先减去其平均值,然后除以其标准差
进一步通过γ缩放,通过β偏移,这些是batch normalization层的参数,当网络不需要数据的时候,均值为0、标准差为1。
Batch normalization在神经网络的训练中具有较高的效率,因此得到了广泛的应用。但它在推理的时候有多少用处呢?
一旦训练结束,每个Batch normalization层都拥有一组特定的γ和β,还有μ和σ,后者在训练过程中使用指数加权平均值进行计算。这意味着在推理过程中,Batch normalization就像是对上一层(通常是卷积)的结果进行简单的线性转换。
由于卷积也是一个线性变换,这也意味着这两个操作可以合并成一个单一的线性变换!这将删除一些不必要的参数,但也会减少推理时要执行的操作数量。
在实践中怎么做? 用一点数学知识,我们可以很容易地重新对卷积进行排列来处理batch normalization。提醒一下,对一个输入x进行卷积之后再进行batch normalization的运算可以表示为:
那么,如果我们重新排列卷积的W和b,考虑batch normalization的参数,如下:
我们可以去掉batch normalization层,仍然得到相同的结果!
注意:通常,在batch normalization层之前的层中是没有bias的,因为这是无用的,也是对参数的浪费,因为任何常数都会被batch normalization抵消掉。
这样做的效果怎样? 我们将尝试两种常见的架构:
使用batch norm的VGG16
ResNet50
为了演示,我们使用ImageNet dataset和PyTorch。两个网络都将训练5个epoch,看看参数数量和推理时间的变化。
1. VGG16 我们从训练VGG16 5个epoch开始(最终的准确性并不重要):
参数的数量:
单个图像的初始推理时间为:
如果使用了batch normalization折叠,我们有:
以及:
8448个参数被去掉了,更好的是,几乎快了0.4毫秒!最重要的是,这是完全无损的,在性能方面绝对没有变化:
让我们看看它在Resnet50的情况下是怎么样的!
2. Resnet50 同样的,我们开始训练它5个epochs:
初始参数量为:
推理时间为:
使用batch normalization折叠后,有:
和:
现在,我们有26,560的参数被移除,更惊讶的hi,推理时间减少了1.5ms,性能一点也没降。
英文原文:https://towardsdatascience.com/speed-up-inference-with-batch-normalization-folding-8a45a83a89d8
下载一:中文版!学习TensorFlow、PyTorch、机器学习、深度学习和数据结构五件套! 后台回复【五件套】 下载二:南大模式识别PPT 后台回复【南大模式识别】 说个正事哈
由于微信平台算法改版,公号内容将不再以时间排序展示,如果大家想第一时间看到我们的推送,强烈建议星标我们和给我们多点点【在看】。星标具体步骤为:
(1)点击页面最上方“深度学习自然语言处理”,进入公众号主页。
(2)点击右上角的小点点,在弹出页面点击“设为星标”,就可以啦。
感谢支持,比心。
投稿或交流学习,备注:昵称-学校(公司)-方向,进入DL&NLP交流群。
方向有很多:机器学习、深度学习,python,情感分析、意见挖掘、句法分析、机器翻译、人机对话、知识图谱、语音识别等。
如果你也是一名小程序开发者,当你打开一个高颜值的小程序时,是不是很想知道「这用的是哪一套 UI 组件库」呢?
目前,网上已有不少开源的小程序组件库,但选择太多往往让人挑花了眼,反而不知哪一款才适合自己。今天,知晓君跟大家分享 7 款比较好用的组件库,如果你想开发,或是正在开发小程序,不妨了解一下,对比它们之间的长短与异同。
WeUI
WeUI 是微信官方出品的组件库,它沿用了微信的视觉设计与交互设计,提供了各类原生组件的基础样式,风格简约大方。选用这一套组件库,可以让你的小程序与微信本身保持一致的界面风格。
官方组件库能够满足基础的界面需求,但是,如果你想要更加饱满的视觉,更加活泼的动效,恐怕 WeUI 就满足不了你的需要了。
GitHub 地址:https://github.com/Tencent/weui
ColorUI 组件库
ColorUI 是由文晓港发布的高颜值组件库,侧重于视觉交互。比起 WeUI 的低调克制,ColorUI 色彩鲜亮,样式繁多。除了拥有非常丰富的原生组件的自定义样式,它还提供一些常见的页面元素,比如时间轴、步骤条、聊天页、模态窗口等等。
这些页面元素通常应用在哪些场景下呢?
如果你想做一款诸如日记类、记账类、博客类、Vlog 类的小程序,这时就需要用到「时间轴」。
如果你想做一款涉及流程的小程序,比如物流跟踪,工作审批等,「步骤条」就可以派上用场了。
如果你想做一款社交类小程序,那么,当然少不得要用到「聊天」的界面。
而「模态窗口」则可以应用于各类小程序中出现弹框、侧边栏的地方。
此外,ColorUI 还引入了插件扩展,也就是更为复杂的组件。目前已有的扩展包括索引列表、微动画、全屏抽屉以及垂直导航。引用这几项扩展,只需编写少量代码,就能实现较炫的视觉交互,进一步简化了开发工作。
前面我们已经提到,ColorUI 是侧重于视觉交互的组件库,这方面的表现,还在于它为用户提供了色彩的搭配方案。打开「背景」,可以看到深色、淡色、渐变等多种配色。
ColorUI 还有许多值得推荐的地方。多样化的示例就是其中之一,它详尽地向用户展示了各种情况下,开发者可能需要编写的样式。
比如,打开「头像」,就会看到被一一列举的圆形头像、圆角矩形头像、各种尺寸头像、默认头像、文字头像、彩色头像、头像组、贴标签头像等等。一个这么简单的组件,也可以有许多种不同的呈现方式。
又比如,打开「列表」,不仅可以看到宫格列表、菜单列表、消息列表、左滑列表等基本的样式,还可以设置一些可选项,像边框、箭头等,在细节处也有多种可选样式。
ColorUI 给大家提供了高度自定义的组件,一些比较麻烦的样式,开发者只需调用其组件就能得以实现。不过,ColorUI 也不是万能的,比如,它尚未涉及购物类小程序所需的组件。
GitHub 地址:https://github.com/weilanwl/ColorUI
Vant 组件库演示
Vant 是由有赞发布的,轻量的小程序 UI 组件库。如果你想制作一款电商、餐饮、外卖平台、票务预订等购物类小程序,选用 Vant 是较为合适的。为什么这么说呢?
首先,我们来看「业务组件」这一块。可以看到,「商品卡片」与「提交订单栏」两个组件可以构成一个基本的「购物车」页面;而「商品卡片」与「商品导航」二者又可以组成一个简单的商店页面。
我们再看看其他琐碎的组件,比如「表单组件」中的「评分」、「搜索」、「步进器」,都属于购物类小程序需要用到的组件。
「导航组件」中的「徽章」与「展示组件」中的「分类选择」,都可以用于商品品类的选择切换。
「展示组件」中的「折叠面板」与「面板」可以用作详细介绍商品的组件,「步骤条」则可以用于显示物流跟踪信息。
使用 Vant 组件库,除了可以用常用的 Toast 方法,向用户弹出提醒消息,还可以引用「反馈组件」中的「消息通知」以及「展示组件」中的「通告栏」,向用户输出通知信息。
除了以上可用于购物类小程序的组件,Vant 组件库当然还有那些比较通用基本元素、弹出层、Transition 动画等。值得一提的是,Vant 还支持自定义 Actionsheet,在「反馈组件」的「上拉菜单」中,有三种不同的自定义 Actionsheet。
Vant 对开发者非常友好,文档可以说是事无巨细了,而且在文档右侧,还可以预览样式哦。
开发文档:https://youzan.github.io/vant-weapp/#/intro
GitHub 地址:https://github.com/youzan/vant-weapp
iViewUI