Python之音频信号处理(一)音频基础知识

一、音频基础知识 1、声音的三要素 (1)音调 人耳对声音高低的感觉称为音调(也叫音频)。音调主要与声波的频率有关。声波的频率高,则音调也高。一般音频 儿童>女生>男生。 人耳听觉音频范围是20Hz-20000Hz(做音频压缩时不在这个范围内的数据就可以砍掉)。 (2)音量 也就是响度。人耳对声音强弱的主观感觉称为响度。响度和声波振动的幅度有关。一般说来,声波振动幅度越大则响度也越大。 人们对响度的感觉还和声波的频率有关,同样强度的声波,如果其频率不同,人耳感觉到的响度也不同。 (3)音色 也就是音品。音色是人们区别具有同样响度、同样音调的两个声音之所以不同的特性,或者说是人耳对各种频率、各种强度的声波的综合反应。音色与声波的振动波形有关,或者说与声音的频谱结构有关。 2、音频的量化与编码 (1)音频的量化过程 现实生活中,我们听到的声音都是时间连续的,我们把这种信号叫模拟信号。模拟信号(连续信号)需要量化成数字信号(离散的、不连续的信号)以后才能在计算机中使用。如下所示量化过程分为5个步骤: 模拟信号 现实生活中的声音表现为连续的、平滑的波形,其横坐标为时间轴,纵坐标表示声音的强弱。采样 按照一定的时间间隔在连续的波上进行采样取值,如下图所示取了10个样。量化 将采样得到的值进行量化处理,也就是给纵坐标定一个刻度,记录下每个采样的纵坐标的值。编码 将每个量化后的样本值转换成二进制编码。数字信号 将所有样本二进制编码连起来存储在计算机上就形成了数字信号。 (2)量化的基本概念 1)采样大小 一个采样用多少个bit存放,常用的是16bit(这就意味着上述的量化过程中,纵坐标的取值范围是0-65535,声音是没有负值的)。 2)采样率 也就是采样频率(1秒采样次数),一般采样率有8kHz、16kHz、32kHz、44.1kHz、48kHz等,采样频率越高,声音的还原就越真实越自然,当然数据量就越大。 模拟信号中,人类听觉范围是20-20000Hz,如果按照44.1kHz的频率进行采样,对20HZ音频进行采样,一个正玄波采样2200次;对20000HZ音频进行采样,平均一个正玄波采样2.2次。 3)声道数 为了播放声音时能够还原真实的声场,在录制声音时在前后左右几个不同的方位同时获取声音,每个方位的声音就是一个声道。声道数是声音录制时的音源数量或回放时相应的扬声器数量,有单声道、双声道、多声道。 4)码率 也叫比特率,是指每秒传送的bit数。单位为 bps(Bit Per Second),比特率越高,每秒传送数据就越多,音质就越好。 码率计算公式: 码率 = 采样率 * 采样大小 * 声道数 比如采样率44.1kHz,采样大小为16bit,双声道PCM编码的WAV文件: 码率=44.1hHz16bit2=1411.2kbit/s。 那么录制1分钟的音乐的大小为(1411.2 * 1000 * 60) / 8 / 1024 / 1024 = 10.09M。 3、音频压缩技术 音频压缩主要包括2种方法: (1)消除冗余数据 这种压缩的主要方法是去除采集到的音频冗余信息,这些被删除掉的音频信号是没法恢复的,所以称为有损压缩。 冗余信息包括人类听觉范围之外的音频信号和被掩蔽掉的音频信号。什么是被掩蔽的信号呢?信号的掩蔽分为频域掩蔽和时域掩蔽。 1)频域掩蔽效应 人类听觉范围是20-20000Hz,但这并不意味着只要是这个频率范围内的声音都可以听到,能否听到还与声音的分贝大小有关,有个分贝临界值,高于这个临界值的声音才能听到,低于这个临界值的声音就听不到,在不同的频率下这个临界值是不一样的。 还有一种情况,比如2个音调差不多的人同时说话,一个声音很大,一个声音很小,声音小的会受到声音大的影响,导致声音小的无法被听到。 2)时域掩蔽效应 除了同时发出的声音之间有掩蔽现象之外,在时间上相邻的声音之间也有掩蔽现象,称为时域掩蔽。时域掩蔽又分为超前掩蔽和滞后掩蔽,如下图所示。产生时域掩蔽的主要原因是人的大脑处理信息需要花费一定的时间。一般来说,超前掩蔽很短,只有大约5~20ms,而滞后掩蔽可以持续50~200ms。 (2)哈夫曼无损编码 将人类无法识别的声音信号删除掉后,对剩余的声音信号继续进行压缩编码,经过这种压缩后再还原时是可以复原到和原来一样的数据的(当然,复原也只是复原到压缩前的状态,那些删除的人类无法识别的部分是不能复原的),所以称为无损压缩。 二、音频信号的读写 标准的python已经支持WAV格式的书写,而实时的声音输入输出需要安装pyAudio(http://people.

HAXM is not installed--此计算机不支持英特尔虚拟化技术(VT-x),或者它正被Hyper-V独占使用。无法安装HAXM

当你在安装虚拟机的时候,提示HAXM is not install: 我的解决办法: 1.点击图中所示位置: 点击OK按钮后,会弹出提示框,点确认即可 2.选择接受,一路next 3.不幸的是,接下来可能会报错:提示你安装出错,根据提示的指定路径,查看错误原因 我的错误原因是: 如果你的错误原因跟我一样,别急。前往:控制面板>系统和安全>系统,查看的CPU处理器的型号, 如果你的CPU和我一样,那没办法,你的CPU不支持HAXM,不过别哭,你可以用真机测试,比用模拟机速度还快 如果你的CPU是Intel,更别哭,你可以去这里学习怎么处理Win 10 下 android studio显示 Intel haxm无法安装,以及VT-X和Hyper-V的冲突问题 https://blog.csdn.net/Coco_chun/article/details/90261678

十五、文件上传与下载

一、文件上传的基础 1.1 为何需要文件上传 案例: 注册表单/保存商品等相关模块! -- 注册选择头像 / 商品图片 (数据库:存储图片路径 / 图片保存到服务器中指定的目录) 1.2 文件上传的要点 文件上传,要点: 前台: 1. 提交方式:post 2. 表单中有文件上传的表单项: <input type=”file” /> 3. 指定表单类型: 默认类型:enctype="application/x-www-form-urlencoded" 文件上传类型:enctype="multipart/form-data" <form action="./file?method=upload" method="post" enctype="multipart/form-data"> 用户名:<input type="text"><br/> 文件:<input type="file" /> <br/> <input type="submit" /> </form> 二、手动实现文件上传 2.1 代码实现 update.jsp <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Insert title here</title> </head> <body> <form action="./update" method="post" enctype="multipart/form-data"> 姓名:<input type="text" name="username"><br/> 文件:<input type="

The Tomcat connector configured to listen on port 8081 failed to start.-- 解决端口占用问题

百度翻译的解释: 这种错误提示,一般都是端口被占用的问题,我这个显示的是端口8081被占用 解决办法: 点击图示位置,关闭项目就可以了(最新修改的) 以下是以前的笨方法,使用IDEA不熟练 1.输入你想要查的正在占用的端口号:netstat -ano|findstr 8081,此时会显示端口8081对应的tcp号 2.输入命令taskkill /f /t /im 17044,终止了8081端口的运行进程 3.此时项目的8081端口就可以正常的运行了

stm32cube 串口空闲中断接收(非DMA方式)

简述 实际开发过程中,DMA通道全部占用,余下串口无DMA使用,改用非DMA方式接收数据。 配置过程 MCU使用STM32F427,串口配置用图说明(偷个懒)。 在主函数初始化中,除开cube自动生成的串口初始化外,还需额外调用指明接收buffer[size]和使能空闲中断接收。 HAL_UART_Receive_IT(&huart8,recv_buffer, USART_RX_SIZE);//指明接收buffer和size __HAL_UART_ENABLE_IT(&huart8, UART_IT_IDLE);//开启空闲中断 /* 中断接收数据处理过程 */ void recv_handle(UART_HandleTypeDef *huart) { uint16_t length = 0; if ( __HAL_UART_GET_FLAG(huart, UART_FLAG_IDLE)) { __HAL_UART_CLEAR_IDLEFLAG(huart); if (huart->RxState == HAL_UART_STATE_BUSY_RX) { /* Disable RXNE, PE and ERR (Frame error, noise error, overrun error) interrupts */ CLEAR_BIT(huart->Instance->CR1, (USART_CR1_RXNEIE | USART_CR1_PEIE)); CLEAR_BIT(huart->Instance->CR3, USART_CR3_EIE); /* At end of Rx process, restore huart->RxState to Ready */ huart->RxState = HAL_UART_STATE_READY; } length = USART_RX_SIZE - huart->RxXferCount; //数据处理,写入缓存区 for (uint8_t i; i < length; i++) { printf("

Python使用Redis实现IP代理池

可以使用快代理,芝麻代理,蘑菇代理 ,讯代理等代理商提供API代理IP或者免费代理建立自己IP代理池 #使用apscheduler库定时爬取ip,定时检测ip删除ip,做了2层检测,第一层爬取后放入redis——db0进行检测,成功的放入redis——db1再次进行检测,确保获取的代理ip的可用性 import requests, redis import pandas import random from apscheduler.schedulers.blocking import BlockingScheduler import datetime import logging db_conn = redis.ConnectionPool(host="*.*.*.*", port=6379, password="123456") redis_conn_0 = redis.Redis(connection_pool=db_conn, max_connections=10,db=0) redis_conn_1 = redis.Redis(connection_pool=db_conn, max_connections=10,db=1) # 删除redis数据库里的ip def remove_ip(ip,redis_conn): redis_conn.zrem("IP", ip) print("已删除 %s..." % ip) # 获取redis数据库里一共有多少ip def get_ip_num(redis_conn): num = redis_conn.zcard("IP") return num # 获取ip的端口 def get_port(ip,redis_conn): port = redis_conn.zscore("IP", ip) port = str(port).replace(".0", "") return port # 添加ip和端口到数据库里 def add_ip(ip, port,redis_conn): # nx: 不要更新已有的元素。总是添加新的元素,只有True,False redis_conn.

运行python代码import cv2时报错的解决方法

我这枚python小白最近尝试使用python进行图像处理,我是win7+python3.8运行环境,运行网上的代码一直报错: ImportError: No module named cv2 后来查了查,原来因为我没有提前安装cv2的包所以一直无法运行代码,网上的各种解决方法我都试过了,比如说: (1)用pip install opencv python的方法 (2)下载opencv的某个文件移至python的文件夹下 下面是我试过的部分教程的链接,这些方法不适合我,但是你们可以试一试: import cv2出错ModuleNotFoundError: No module named ‘cv2’ Python初学者之ModuleNotFoundError:No module named 'cv2’简单解决办法 ImportError: No module named cv2的完美解决方法!!!(不能太赞) python3.7安装opencv python后import cv2找不到指定模块 后来我去请教了老师,尝试着按照老师给的解决方法去解决,我卸载了python3.8,去安装了anaconda2 下载网址:https://www.anaconda.com/distribution/ 【奉上 Anaconda安装教程 我配置好了Anaconda的环境变量,然后我进入Anaconda的目录下输入命令:pip install opencv-python,然后系统就会自动安装对应的opencv包 但是我发现下载过程特别慢,甚至最后还出错:Read timed out 经查证,原来是因为下载速度太慢了,用镜像网址解决: 后来我照猫画虎把命令改成 pip install opencv-python -i https://pypi.tuna.tsinghua.edu.cn/simple/ 然后很快就下载好了。 再运行import cv2 就没有出错了,问题解决!

FFmpeg使用drawtext功能给视频文件添加中文字幕后,中文字幕显示乱码

windows下执行命令: ffmpeg -hide_banner -y -i video1.mp4 -vf drawtext=fontcolor=white:fontsize=40:text='一二三四':x=0:y=100 -b:v 3000K video2.mp4 该命令的含义为:给视频文件“video1.mp4”添加静态字幕(该字幕实际上是水印)。添加的字幕的颜色为白色,字体大小为40,要添加的文本为“一二三四”,在相对于视频左上角坐标(0,100)的位置添加字幕。最终生成video2.mp4文件。 但结果最终生成的文件video2.mp4中的字幕却是乱码的,显示"口口口口”,如下图所示: 产生该问题的原因是FFmpeg找不到字体库。在windows下的C:\Windows\Fonts目录下存放着很多字体文件,比如下图中的这个msyh.ttc(微软雅黑 常规): 我们将这个msyh.ttc拷贝到ffmpeg.exe所在的文件夹下,然后执行命令: ffmpeg -hide_banner -y -i video1.mp4 -vf drawtext=fontcolor=white:fontsize=40:fontfile=msyh.ttc:text='一二三四':x=0:y=100 -b:v 3000K video2.mp4 该命令通过fontfile=msyh.ttc指定了字体库文件为msyh.ttc。 执行上述命令后生成的视频文件效果如下,可以看到添加的中文字幕没有乱码了。

java开发常用的jar包的作用解释

转载自:http://blog.csdn.net/chaod5659/article/details/8250845 java开发中主要用到的jar包描述 commons-io.jar: 可以看成是java.io的扩展,用来帮助进行IO功能开发.它包含三个主要的领域:Utilityclasses-提供一些静态方法来完成公共任务.Filters-提供文件过滤器的各种实现.Streams-提供实用的Stream,reader与writer实现. commons-beanutils.jar: 提供对Java反射和自省API的包装,主要提供了对于JavaBean进行各种操作。 commons-digester.jar: 它能方便地将XML文档所定义的元素转化为JAVA对象,其实它的用法有点象栈(当然内在的原理就是那个古老的东西,只是提供了更高一层的封装)。 commons-lang.jar: 它扩展了标准java.langAPI,增加了字符串操作方法、基本数值方法、对象反射、创建和串行化以及System属性。它还包含一个可继承的enum类型、对多种嵌套的Exception类型的支持、对java.util.Date的增强以及用于构建方法的实用程序,例如自动生成toString()的结果、自动实现hashCode()和equals()方法、数组操作、枚举、日期和时间的处理等等。 ArrayUtils–用于对数组的操作,如添加、查找、删除、子数组、倒序、元素类型转换等; BitField–用于操作位元,提供了一些方便而安全的方法; BooleanUtils–用于操作和转换boolean或者Boolean及相应的数组; CharEncoding–包含了Java环境支持的字符编码,提供是否支持某种编码的判断; CharRange–用于设定字符范围并做相应检查; CharSet–用于设定一组字符作为范围并做相应检查; CharSetUtils–用于操作CharSet; CharUtils–用于操作char值和Character对象; ClassUtils–用于对Java类的操作,不使用反射; ObjectUtils–用于操作Java对象,提供null安全的访问和其他一些功能; RandomStringUtils–用于生成随机的字符串; SerializationUtils–用于处理对象序列化,提供比一般Java序列化更高级的处理能力; StringEscapeUtils–用于正确处理转义字符,产生正确的Java、JavaScript、HTML、XML和SQL代码; StringUtils–处理String的核心类,提供了相当多的功能; SystemUtils–在java.lang.System基础上提供更方便的访问,如用户路径、Java版本、时区、操作系统等判断; Validate–提供验证的操作,有点类似assert断言; WordUtils–用于处理单词大小写、换行等。 commons-codec.jar: 包含一些通用的编码解码算法。包括一些语音编码器,Hex,Base64,以及URLencoder。 commons-collections.jar: 提供一个类包来扩展和增加标准的JavaCollection框架。 Bag接口:适用于包含一个对象的多个拷贝的集合 Buffer接口:适用于具有顺序的集合类,例如FIFOs(先进先出) BidiMap(双向映射):可以通过值查找键,也可以通过键查找值 Map迭代器:提供了对映射的快速迭代 对类型检查进行了封装,确保特定类的实例可以被添加到集合中 对转换进行了封装,将集合中的对象转换成被加入时的类型 对集合进行组合,使多个集合看起来就像一个集合一样 有序映射和set,保持元素添加时的顺序,包括一个基于LRU的map 标识映射可以给予对象的==来比较对象,而不是基于equals方法 引用映射可以允许键and/or值可以有控制的进行回收 很多比较器的实现 很多迭代器的实现 从数组或者枚举到集合的适配器 用来测试或者创建典型set理论的集合属性,例如与、或、闭包 commons-dbutil.jar: 对传统操作数据库的类进行二次封装,可以把结果集转化成List (1)org.apache.commons.dbutils DbUtils :提供如关闭连接、装载JDBC驱动程序等常规工作的工具类 QueryRunner:该类简单化了SQL查询,它与ResultSetHandler组合在一起使用可以完成大部分的数据库操作,能够大大减少编码量。 QueryLoader:属性文件加载器,主要用于加载属性文件中的SQL到内存中。 (2)org.apache.commons.dbutils.handlers ArrayHandler:将ResultSet中第一行的数据转化成对象数组ArrayListHandler将ResultSet中所有的数据转化成List,List中存放的是Object[] BeanHandler:将ResultSet中第一行的数据转化成类对象 BeanListHandler:将ResultSet中所有的数据转化成List,List中存放的是类对象 ColumnListHandler:将ResultSet中某一列的数据存成List,List中存放的是Object对象 KeyedHandler:将ResultSet中存成映射,key为某一列对应为Map。Map中存放的是数据 MapHandler:将ResultSet中第一行的数据存成Map映射 MapListHandler:将ResultSet中所有的数据存成List。List中存放的是Map ScalarHandler:将ResultSet中一条记录的其中某一列的数据存成Object java开发中主要用到的jar包总结 axis.jar:SOAP引擎包 jaxrpc.jar:Axis运行所需要的组件包 saaj.jar:创建到端点的点到点连接的方法、创建并处理SOAP消息和附件的方法,以及接收和处理SOAP错误的方法. wsdl4j-1.5.1.jar:Axis运行所需要的组件包 activation.jar:JAF框架的jar包 annotations-api.jar:使用注解所需jar ant.jar:用于自动化调用程序完成项目的编译,打包,测试等

JS深度拷贝dom节点

原生JS: var oldDom = document.querySelector('#domId'); var newDom = oldDom.cloneNode(true) jQuery: var oldDom = $('#domId'); var newDom = oldDom.clone(true) 相关链接: JS里如何深度拷贝一个dom节点

flex弹性如何实现内容溢出但不换行

在父元素上加flex-wrap: nowrap 表示不换行 在子元素上加flex-shrink:0 表示不收缩 <style> * { margin: 0; padding: 0 } ul { list-style: none; } .list { width: 750px; height: 75px; background: #161618; display: flex; flex-wrap: nowrap; overflow: hidden; } li { color: #999999; font-size: 32px; line-height: 75px; flex-shrink: 0; margin-right: 50px; } li:nth-of-type(1) { margin-left: 24px; color: #a8875b; } </style> <body> <ul class="list"> <li>精选 </li> <li>VIP俱乐部</li> <li>电影</li> <li>电视剧</li> <li>综艺</li> <li>动漫</li> </ul> </body> </html>

Kali Linux 2020.1修改Root用户密码

背景信息: 多年以来,Kali从BackTrack继承了默认的root用户策略。作为对Kali工具和策略的评估的一部分,因此Kali 决定对此进行更改,并将Kali移至“传统默认非根用户”模型。那如果我们因某些情况想开启Root用户这应该如何是好呢?若想知道,请看下列操作步骤~ 操作步骤: 1.启动Kali Liunx 进入开机启动页面,按键盘e键进入Kali GNU GRUB页面 2.进入Kali GNU GRUB页面 3.在Kali GNU GRUB页面,选择linux那一行,将ro 改为 rw 在此行末尾增加 init=/bin/bash 修改完毕以后按Ctrl+X 键进入单用户模式 linux /boot/vmlinuz-5.4.0-kali3-amd64 root=UUID=d33729e-3161-42a4-83f2-bcdf68c19b2 rw quiet splash init=/bin/bash 4.按Ctrl + C 进入单用户模式命令行界面 5.执行passwd命令重置root账号密码,请连续输入两次密码~密码是密文的,直接如即可,输入完自己设置的密码以后会提示密码更新成功 7.重启Kali 到此登陆页面,输入刚才设置的账号密码,回车进行登陆,至此已经使用root账号登陆成功

Android 10 出现"此应用专为旧版Android打造,因此可能无法正常运行。请尝试检查更新或与开发者联系"

在Android P(9.0)出现此弹窗,多数建议为 targetSdk > 17, minSdk> 17, 最近测试反应在Android 10上也出现该弹窗,经测试targetSdk > 17时能够安装,但是会有弹窗提示,要去掉这个弹窗需要修改 targetSdk >= 23 即可, 但是修改23的话要记得加动态权限申请。 出现此弹窗的关键代码是AppWarnings.java中的下面代码由决定的: public void showDeprecatedTargetDialogIfNeeded(ActivityRecord r) { if (r.appInfo.targetSdkVersion < Build.VERSION.MIN_SUPPORTED_TARGET_SDK_INT) { mUiHandler.showDeprecatedTargetDialog(r); } } Build.VERSION.MIN_SUPPORTED_TARGET_SDK_INT的值: public static final int MIN_SUPPORTED_TARGET_SDK_INT = SystemProperties.getInt( "ro.build.version.min_supported_target_sdk", 0); 可能在Android 10上这个值变成了23,可以打印一下看看。 参考:https://www.jianshu.com/p/9dc825ac1c58

Java数据类型、数据类型的转换、包装类、instanceof

数据类型 基础介绍 类型占用存储空间范围byte1字节-128~127short2字节-32768~32767int4字节-21~21(亿)long8字节float4字节-3.403E38~3.403E38double8字节-1.798E308~1.798E308 注意事项 整型常量默认为int型,声明long型常量可以后加‘ l ’或‘ L ‘(建议使用大写,小写容易误认为数字1)。 如: long a = 55555555; //不出错,在Int表示的范围内(21亿内)。 long b = 55555555555;//不加l出错,已经超过int表示的范围。浮点常量默认为double。要变为float,需在后面增加F/f. 如: 3.14F浮点数存在舍入误差,很多数字不能精确表示。如果需要进行不产生舍入误差的精确数字计算,需要使用BigDecimal类。Java.math包下面有两个有用的类:BigInteger和BigDecimal这两个类可以处理任意长度的数值。BigInteger实现了任意精度的整数运算。BigDecimal实现了任意精度的浮点运算。 例如:BigDecimal bd=BigDecimal.valueOf(0.1)//bd等于0.1Java进制 八进制:要求以0开头。 十六进制:要求以0x或者0X开头。 二进制:要求以0b或者0B开头。科学计数法 314e2=314E2=31400 314e-2=3.14 类型转换 强制类型转换 高级变为低级需要强制转换。 如何转换 赋值运算符“=”右边的转换,先自动转换成表达式中级别最高的数据类型,再进行运算。赋值运算符“=”两侧的转换,若左边级别>右边级别,会自动转换;若左边级别 == 右边级别,不用转换;若左边级别 < 右边级别,需强制转换。可以将整型常量直接赋值给byte, short, char等类型变量,而不需要进行强制类型转换,前提是不超出其表述范围,否则必须进行强制转换。 二元运算符的运算规则 整数运算 如果两个操作数有一个为long,则结果也为long。 没有long结果为int。即使操作数全为short、byte结果也为int。 浮点运算 如果两个操作数有一个为double,则结果为double。 只有两个操作数都是float,结果才是float。 取模运算 其操作数可以是浮点数,一般使用整数,结果是“余数”,“余数”符号和左边操作数相同。 其它转换 int -> string : String.valueOf(var); 包装类 作用 基本数据类型有方便之处,简单、高效,但是Java 中的基本数据类型不是一个对象,我们在实际使用中经常需要将基本数据转化成对象,比如:集合的泛型。这时我们就需要将基本类型数据转化成对象! 基本类型传递参数时是按值传递,包装类是引用传递。 基本类型会在栈中创建,效率较高,但有内存泄漏的危险;对于包装类对象是在堆中创建,对象的引用在栈中。 对应关系 基本数据类型包装类byteBytebooleanBooleanshortShortcharCharacterintIntegerlongLongfloatFloatdoubleDouble 自动装箱和拆箱 JDK1.5提供了自动装箱(autoboxing)和自动拆箱(autounboxing)功能, 从而实现了包装类和基本数据类型之间的自动转换。 基本类型自动地封装到与它相同的类型的包装类。 包装类对象自动转换成基本类型数据。 IntegerCache //IntegerCache中在-128到127之间做了缓存,其中最大边界可以通过-XX:AutoBoxCacheMax进行配置 Integer a = 127, b = 127, c = 128, d = 128; System.

matlab Fourier变换--方波信号的分解与重建

N=200; %采用的数据点数 dt=4/N; %采样的间隔 for n=1:N %生成一个方波 if (n*dt>=2) x(n)=0.8; else x(n)=-0.8; end end figure subplot(2,1,1) plot((1:N)*dt,x) hold on plot((1:N)*dt,zeros(1,N),'k'); xlabel('时间/s') ylabel('方波信号'); title('原始信号'); %下面开始计算傅里叶变换系数 a=zeros(1,N); b=a; c=b; nn=floor(N/2)+1; for k=0:nn-1 a(k+1)=0; b(k+1)=0; for ii=0:N-1 a(k+1)=a(k+1)+2/N*x(ii+1)*cos(2*pi*k*ii/N); %求解Fourier系数 b(k+1)=b(k+1)+2/N*x(ii+1)*sin(2*pi*k*ii/N); end c(k+1)=sqrt(a(k+1).^2+b(k+1).^2); end subplot(2,1,2) freq=(0:nn-1)/(N*dt); plot(freq,c(1:length(freq))); title('Fourier变换'); xlabel('频率/Hz') ylabel('振幅'); %下面通过逆变换重现信号 m=input('输入谐波的最大阶数:'); if(m>(floor(N/2)+1)) error('谐波最大阶数必须小于Nyquist频率对应的阶数.'); end if(mod(N,2)~=1) a(nn)=a(nn)/2; end %合成信号 for ii=0:N-1 xx(ii+1)=a(1)/2; for k=1:m xx(ii+1)=xx(ii+1)+a(k+1)*cos(2*pi*k*ii/N)+b(k+1)*sin(2*pi*k*ii/N); end end % figure plot((1:N)*dt,xx,(0:N-1)*dt,x); hold on plot((1:N)*dt,zeros(1,N),'k'); xlabel('时间/s') ylabel('信号'); title('合成信号'); 通过不断提高最大谐波的阶数,经过Fourier逆变换来重新原来的方波信号会越来越接近真实。

React函数式组件

React组件:可以分为类组件和函数式组件 1、函数式组件中没有state 2、函数式组件中没有生命周期(重点,涉及到生命周期的方法只能在类组建中定义) 可以借助react提供的hooks在函数式组建中做状态和方法 react对象有个useState函数,可以通过该函数创建状态,并且该函数是有返回值的: const [count,setCount] = useState(0); console.log(useState(0)) //[0, ƒ] 得到两个值count和setCount,分别为创建的state和操作state的方法, 名称是根据我们自己的需求命名的,由于该方法返回的是数组,因此我们直接用数组解构 的方式来接收返回值即可 **注意:**使用setCount方法的时候,该方法会将count的值直接修改为传入的实参的值。 export default () => { let [count, setCount] = useState(1) //state部分 const add = (arg) => { setCount(arg) } //操作状态的方法 }函数组建的三个组成结构 return (<div> //return结构 <p>{count}</p> <button onClick={() => add(count + 1)}>+</button> </div>) } //每次点击button,setCount都会设置count的值为当前值加1; 函数组建的构成一般也是结构,分为三个部分: 1、state部分;2、操作状态的方法;3、return结构(如上面代码注释所示) 无论一个函数组件多么复杂都应该遵循这个解构来创建。 函数组建中使用props: 使用方式类似类组件的props使用,父级组件需要暴露接口给子组件,子组件才能接收,子组件接收数据的方法:直接作为函数的参数(props)传给子组件。 //父级组件传过去 export default () => { let [count, setCount] = useState(1) const add = (count) => { setCount(count) } return (<div> //类似类组件中的接口传递数据到子组件 <Title count={count} /> <button onClick={() => add(count + 1)}>+</button> </div>) } //子组件接收 export default (props) => { return ( <h1>{props.

Leetcode数组题(Java作答)

目录 268.缺失数字 605.种花问题 581.最短无序连续子数组 724.寻找数组的中心索引 217.存在重复元素 35.搜索插入位置 27.移除元素 766.托普利茨矩阵 53.最大子序和 169.多数元素 849.到最近的人的最大距离 509.斐波那契数 1160.拼写单词 994.腐烂的橘子 1103.分糖果II 1013.将数组分成和相等的三个部分 892.三维形体的表面积 999.车的可用捕获量 888.公平的糖果交换 463.岛屿的周长 268.缺失数字 给定一个包含 0, 1, 2, ..., n 中 n 个数的序列,找出 0 .. n 中没有出现在序列中的那个数。 示例 1: 输入: [3,0,1] 输出: 2 示例 2: 输入: [9,6,4,2,3,5,7,0,1] 输出: 8 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/missing-number class Solution { public int missingNumber(int[] nums) { int[] newnums=new int[nums.length+1];//创建1个长度为n+1的数组,角标是0~n for(int i=0;i<=nums.length-1;i++){//遍历给定的数组 newnums[nums[i]]=1;//借鉴计数排序的思想,将nums中的数与新数组的角标相匹配,并将所匹配到角标索引的空间值改成1。那么遍历完后肯定角标在0~n中有一个数未匹配,这个数就是缺失数字 } int j=0; for(int i=0;i<=newnums.length-1;i++){ if(newnums[i]!=1){//找出未匹配的角标,角标代表的就是匹配的数字 j=i; } } return j; } } 605.

这些软件太强了,Mac必装!尤其程序员!

2017 年的时候,我花了将近 2 万块买了一台 27 寸的 iMac,但刚入手的时候,觉得真特么不习惯啊,好多 Windows 上好用的软件 APP Store 上都没有! 我老婆三番五次调侃我浪费钱,还不如买台联想台式机,我真的生气了啊。 我忍着忍着,同时尽最大的可能发现着,于是越来越多好用的软件便走进了我的视野,安装在了我的 iMac 上,有一种爱上了的感觉。今天我就来推荐 10 款不错的 Mac 软件,如果你喜欢的话,后面我再推荐一波。 01、IINA IINA 是一款播放器软件,可以打开几乎所有格式的视频,如果 IINA 都打不开,那么其他软件注定也打不开。 IINA 还提供了 Chrome 插件,安装后还可以播放在线视频哦。如果你正好在学习 Swift 编程语言,那么 IINA 的源码是一个不错的学习对象。 下载地址: https://iina.io 02、keka keka 是一款文件解压缩管理工具,如果文件实在太大,不便于发送邮件或者网络传输,还可以进行分卷压缩,不用担心,压缩后的文件仍然可以使用 keka 解压出来。 keka 支持的格式非常多,比如常见的 7Z、ZIP、TAR 等等。之前我一直用 Dr.Unarchiver,但只能解压,不能压缩。 下载地址: https://www.keka.io/zh-cn 03、欧路词典 欧路词典是一款英语学习者必备的工具,可以多平台同步,让你随时随地学英语。另外界面看起来非常专业,当我要搜索一个词的时候,结果中不仅有单词的汉语词义,还有图片;接下来是近义词、词组和常用例句库,完美匹配我的审美需求。 内置的常用英汉词条多达 30 万个,专业词条 40 万个,专业词库覆盖医学、经济、工程、计算机等十多个领域;支持海量第三方词典库,包括:Mdict、林格斯、Babylon 等扩充词库。 下载地址: https://www.eudic.net/v4/en/app/eudic 04、Cheat Sheet Cheat Sheet 是一款记录软件快捷键的神器,非常实用,再也不用从工具栏中一个个扒拉了。 要知道,有了快捷键,工作效率至少能提高十倍,要不也不会叫“快捷”键,对吧?有些软件的快捷键有很多,一下子记住太难了,必须经过岁月的磨炼,那么有一个快捷键的大纲可就实在太重要了。每次忘记快捷键的时候,打开快速浏览一遍,然后迅速实践一次,用不了几次,快捷键就熟烂于心了。 下载地址: https://mediaatelier.com/CheatSheet/?lang=en 05、Spectacle Spectacle 是一款可以帮助你移动窗口的工具,不需要鼠标哦。 只要按住对应的快捷键就可以将当前窗口移动到左上、右上、左下、右下、居中、居右、居左、置顶、置底,我喜欢!

Oracle定时任务(2)-DBMS_SCHEDULER

DBMS_SCHEDULER:任务调度 :官方文档 Oracle 10g之前,可以使用dbms_job来管理定时任务,0g之后,Oracle引入dbms_scheduler来替代先前的dbms_job, 在功能方面,它比dbms_job提供了更强大的功能和更灵活的机制/管理。 使用dbms_scheduler创建一个定时任务有两种形式: 创建1个SCHEDULER来定义计划,1个PROGRAM来定义任务内容,再创建1个JOB,为这个JOB指定上面的SCHEDULER和PROGRAM。直接创建JOB,在参数里面直接指定计划和任务内容。 要执行DBMS_SCHEDULER需要有CREATE JOB权限。 select * from dba_sys_privs where grantee='SCOTT'; --查询用户授予的权限 --授予权限 grant create job to SCOTT; grant manage scheduler to SCOTT; --查询用户所拥有的角色以及角色所包含的权限 select * from role_sys_privs where role in (select granted_role from dba_role_privs where grantee='SCOTT') order by role; 示例1: Connected to Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 Connected as system@ORCL AS SYSDBA SQL> select * from dba_sys_privs where grantee='SCOTT'; GRANTEE PRIVILEGE ADMIN_OPTION ------------------------------ ---------------------------------------- ------------ SCOTT UNLIMITED TABLESPACE NO SCOTT DEBUG CONNECT SESSION NO SQL> SQL> select * from role_sys_privs where role in ( 2 select granted_role from dba_role_privs where grantee='SCOTT' 3 ) order by role; ROLE PRIVILEGE ADMIN_OPTION ------------------------------ ---------------------------------------- ------------ CONNECT CREATE SESSION NO RESOURCE CREATE CLUSTER NO RESOURCE CREATE INDEXTYPE NO RESOURCE CREATE OPERATOR NO RESOURCE CREATE PROCEDURE NO RESOURCE CREATE SEQUENCE NO RESOURCE CREATE TABLE NO RESOURCE CREATE TRIGGER NO RESOURCE CREATE TYPE NO 9 rows selected SQL> SQL> create table test_t1(id int, create_date date); Table created SQL> create or replace procedure test_p1 2 is 3 v_maxId test_t1.

JPA H2 redis 学习笔记

SpringBoot整合H2时:SpringBoot可以自动的配置内嵌的H2、HSQL、Derby数据库。你不需要提供任何链接URLs,只需要简单的提供一个你需要使用的内嵌数据库的依赖即可。 需要注意在不同情况下设置scope,这样就可以使用h2了,不需要做任何配置,这样就可以像使用mysql一样使用了,h2数据库是随着应用的启动而开始运行。 <dependency> <groupId>com.h2database</groupId> <artifactId>h2</artifactId> <scope>runtime</scope> </dependency> #h2 spring.h2.console.enabled=true //开启web console功能 http://localhost:8080/h2-console/ spring.datasource.platform=h2 //数据库平台是H2,可选 spring.h2.console.path=/h2 //设置访问路径 localhost:port/h2 #datasource spring.datasource.driverClassName=org.h2.Driver spring.datasource.url=jdbc:h2:./data/db 是相对路径 spring.datasource.password= spring.jpa.properties.hibernate.dialect = org.hibernate.dialect.H2Dialect 使用的语言 spring.datasource.schema=classpath:db/schema.sql,进行该配置后,每次启动程序,程序都会运行resources/db/schema.sql文件,对数据库的结构进行操作。//创建数据库表 spring.datasource.data=classpath:db/data.sql,进行该配置后,每次启动程序,程序都会运行resources/db/data.sql文件,对数据库的数据操作//向数据库插入数据 上面的是数据库执行的脚本文件,脚本文件要么不存在,如果存在就不能为空,否则会报错。 #spring.jpa.hibernate.ddl-auto=update这个配置不能设置,否则使用H2数据库必定报错。 spring.jpa.show-sql = true spring.datasource.url=jdbc:h2:mem:test内存模式 #Windows当前用户路径 #spring.datasource.url = jdbc:h2:file:~/.h2/dbc2m;AUTO_SERVER=TRUE #可执行程序的当前路径 spring.datasource.url = jdbc:h2:file:./dbh2/dbc2m;AUTO_SERVER=TRUE #指定的静态配置路径 #spring.datasource.url = jdbc:h2:file:D:/db/.h2/dbc2m;AUTO_SERVER=TRUE 尤其是设置主键的增长方式时,值得注意,最好不用设置主键的增长方式为有程序决定。 JPA 对象与表的关系映射 hibernate实现 hibernate的配置文件 <persistence xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd" version="2.0"> <!--配置持久化单元(可以配置多个,名称不能重复) name:用于指定持久化单元的名称 transcation-type:指定事务的类型。 JTA:Java Transcation API RESOURCE_LOCAL:指的是本地代码事务 --> <persistence-unit name="myPersistenceUnit" transaction-type="RESOURCE_LOCAL"> <!--JPA规范提供商,可以不写-->

Spring Data 什么是Spring Data 理解

介绍 Spring Data的使命是为数据访问提供熟悉且一致的基于Spring的编程模型,同时仍保留底层数据存储的特​​殊特性。 它使数据访问技术,关系数据库和非关系数据库,map-reduce框架和基于云的数据服务变得简单易用。这是一个伞形项目,其中包含许多特定于给定数据库的子项目。这些项目是通过与这些激动人心的技术背后的许多公司和开发人员合作开发的。 特征 强大的存储库和自定义对象映射抽象 从存储库方法名称派生动态查询 实现域基类提供基本属性 支持透明审核(创建,最后更改) 可以集成自定义存储库代码 通过JavaConfig和自定义XML命名空间轻松实现Spring集成 与Spring MVC控制器的高级集成 跨存储持久性的实验支持 主要模块 Spring Data主要使用的一些模块,根据需要选择对应的一些功能模块。 Spring Data common- 支持每个Spring Data模块的Core Spring概念。 Spring Data JDBC- 对JDBC的Spring Data存储库支持。 Spring Data JPA - 对JPA的Spring Data存储库支持。 Spring Data MongoDB - 对MongoDB的基于Spring对象文档的存储库支持。 Spring Data Redis - 从Spring应用程序轻松配置和访问Redis。 Spring Data JDBC Ext- 支持标准JDBC的数据库特定扩展,包括对Oracle RAC快速连接故障转移的支持,AQ JMS支持以及对使用高级数据类型的支持。 Spring Data KeyValue - Map基于库和SPI轻松建立键值存储一个Spring数据模块。 Spring Data LDAP - 对Spring LDAP的 Spring Data存储库支持。 Spring Data REST- 将Spring Data存储库导出为超媒体驱动的RESTful资源。

C++ 函数返回值为对象时调用复制构造函数的问题

C++ 函数返回值为对象时调用复制构造函数的问题 知识点: C++中调用复制构造函数的三种情况: 通过一个对象构造另一个对象调用参数为对象的函数调用返回值为对象的函数 – 上述知识点在各种书籍、博客都无不同,属于C++的标准 – 但是实际测试的时候,当调用返回值为对象的函数时,并未按预想地调用复制构造函数。 – 在查阅了很多博客资料后,原因如下: 当调用返回值为对象的函数时,系统消耗调用复制构造函数、调用构造函数、调用析构函数的代价,为了减少消耗,编译器使用了一项名为返回值优化的技术,使得调用函数时不需要调用复制构造函数 具体过程如下: class Person{ string name; int age; Person(string name,int age){ this->name = age; this->age = age; } //复制构造函数 Person(const Person& p){ cout<<"调用复制构造函数"; } }; //返回一个Person对象 Person create(string name,int age){ return new Person(name,age); } int main(){ Person p = create("张三",20); } 优化前:调用create函数时,先根据传入的参数生成一个临时对象 t1(栈中),然后拷贝生成临时对象 t2(栈外),函数执行完毕,返回 t2的地址,t1被回收;p根据返回的 t2 地址构造对象 优化后:调用create函数时,编译器偷偷地增加了一个参数,传入了p的地址,直接在函数内部构造了p对象

Windows Sockets 网络编程及UR机器人通信数据解析代码

1 前言 之前写了几篇关于UR机器人网络控制的文章:《UR机器人返回信息格式解析》、《UR机器人通信端口和协议》,有不少读者问关于编程实现方面的问题,因此,这里上传有关的代码,供同行参考。 2 包含内容 我这里是用VS2015编译环境,用C/C++语言实现的。 实际上没有高深的技术,涉及到两个内容: Windows Sockets网络编程;UR机器人返回数据内容解析,包括数据字节的转换。 3 程序实现 3.1 Windows Sockets网络编程 1) Windows Sockets初始化 在程序的开始,进行Windows Sockets初始化。WSAStartup必须是应用程序或DLL调用的第一个Windows Sockets函数。它允许应用程序或DLL指明Windows Sockets API的版本号及获得特定Windows Sockets实现的细节。应用程序或DLL只能在一次成功的WSAStartup()调用之后才能调用进一步的Windows Sockets API函数。 WSADATA wsaData; if (WSAStartup(MAKEWORD(2, 2), &wsaData) != 0) { printf("Failed to load Winsock"); return; } 对应的,在程序结束前,调用以下语句 WSACleanup(); 2) 建立和断开与服务器的连接 通过IP和端口与服务器建立Socket通信通道,对于UR机器人,缺省的IP和端口为192.168.0.77:30003。 首先建立连接: char* pIp = "192.168.0.77"; int nPort = 30003; SOCKADDR_IN addrSrv; addrSrv.sin_family = AF_INET; addrSrv.sin_port = htons(nPort); // addrSrv.sin_addr.S_un.S_addr = inet_addr(pIp); inet_pton(AF_INET, pIp, &addrSrv.sin_addr); //创建套接字 m_sockData = socket(AF_INET, SOCK_STREAM, 0); if (INVALID_SOCKET == m_sockData) { m_nError = WSAGetLastError(); return; } //向服务器发出连接请求 if (connect(m_sockData, (struct sockaddr*)&addrSrv, sizeof(addrSrv)) == INVALID_SOCKET) { m_nError = WSAGetLastError(); CString msg; msg.

【JAVA - Druid】Druid数据库连接池 -- 快速入门使用

1. 导入相关的 jar 包 * mysql-connector-java.jar包(此包用于idea连接数据库用) * Druid.jar(对数据库进行操作(增删查改,用的是mysql) * 其他包用于数据操作使用 2. 进行相关的数据库配置 ,编写.xml文件 (放在java工程src目录下) // 告诉java去com.mysql.jdbc路径下将Driver类加载到jvm内存中 driverClassName=com.mysql.jdbc.Driver /* 因为此处是本机与端口号默认为80所以简写,全写为(jdbc:mysql://ip地址:端口号/db3?userUnicode=true&characterEncoding=UTF-8 */ url=jdbc:mysql:///db3?useUnicode=true&characterEncoding=UTF-8 // mysql的用户名和密码 username=root password=root // 初始化连接池的大小 initialSize=5 // 连接池最大的连接数 maxActive=10 // 等待时间,以防出现bug持续等待,设置3s(3000ms)无反应自动归还连接对象 maxWait=3000 3.编写JDBC的工具类,java-jvm加载Druid相关配置,初始化连接池等操作,具体代码如下: package webtest; import com.alibaba.druid.pool.DruidDataSourceFactory; import javax.sql.DataSource; import java.io.IOException; import java.io.InputStream; import java.sql.Connection; import java.sql.SQLException; import java.util.Properties; // JDBC工具类,使用的是 Druid连接池 public class JDBCUtils { // 创建一个连接池 ds,private对象默认为 null private static DataSource ds; static { try { // 1.

词嵌入

前言 词嵌入是单词的一种数值化表示方式,一般情况下会将一个单词映射到一个高维的向量中(词向量)来代表这个单词。例如我们将: ‘机器学习’表示为 [1,2,3] ‘深度学习‘表示为[2,3,3] ‘英雄联盟‘表示为[9,1,3] 对于词向量,我们可以使用余弦相似度在计算机中来判断单词之间的距离: ‘机器学习’与‘深度学习‘的距离: ‘机器学习’与‘英雄联盟‘的距离: 通过这篇文章你可以学习到下面内容: 文本的词嵌入是什么,以及它与其他特征提取方法有什么区别。介绍3种主流的从文本数据中学习词嵌入的方法。怎么训练新的词嵌入以及如何在日常的NLP任务中使用预先训练好的词嵌入。 什么是词嵌入? 词嵌入是一种对文本算法学习后的表示形式,甚至,你可以理解为一个单词在算法中的储存形式。大家知道存入计算机的都是0101的数值化序列,这里也是同理,词嵌入就是将文本数值化以方便拟合算法。这种将单词或者文档数字化表示的方式被认为是深度学习在自然语言处理任务中最具有挑战性的问题之一。 使用密集和低维向量的一个好处是方便计算:大多数神经网络工具包不能很好地处理非常高维,稀疏的向量。......密集表示的主要好处是泛化能力,如果我们认为某些特征可能提供类似的线索,那么提供能够捕获这些相似性的表示是值得的。 — Page 92, Neural Network Methods in Natural Language Processing, 2017. 词嵌入实际上是一种将各个单词在预定的向量空间中表示为实值向量的一类技术。每个单词被映射成一个向量(初始随机化),并且这个向量可以通过神经网络的方式来学习更新。因此这项技术基本集中应用与深度学习领域。 这项技术的关键点在于如何用密集的分布式向量来表示每个单词。这样做的好处在于与one-hot这样的编码对比,使用词嵌入表示的单词向量往往只有几十或者几百个维度。极大的减少了计算和储存量。 将词汇表中的每个词与分布式词特征向量相关联...特征向量表示词的不同方面特征,每个词与向量空间中的点相关联。特征的数量......远小于词汇的大小 — A Neural Probabilistic Language Model, 2003. 这种分布式的词向量表示方式依赖于单词的使用习惯,这就使得具有相似使用方式的单词具有相似的表示形式。这个怎么理解呢?回想我们在看游戏直播,IG获得冠军时候的弹幕,很多主播(无论游戏还是娱乐)的直播间都在发‘IG牛逼’和 ‘77777’,所以我们算法能学习到,‘IG牛逼’和 ‘77777’是向量空间中很相近的2个词。 虽然看起来有些粗糙,但是这个方法背后有很深的语言学理论支撑。即Zellig Harris的“distributional hypothesis”。这个假设可以归纳为:具有相似语境的词语具有相似的含义。有关更深入的信息,请参阅Harris的1956年论文 “Distributional structure“。 这种使用语境定义单词的概念可以通过John Firth经常重复的谚语来概括: You shall know a word by the company it keeps! — Page 11, “A synopsis of linguistic theory 1930-1955“, in Studies in Linguistic Analysis 1930-1955, 1962.

wcf 客户端调用报:400 错误

参数越长引起的异常,解决方法是在配置文件里加入: <webHttpBinding> <binding maxReceivedMessageSize="2147483647" crossDomainScriptAccessEnabled="true"> <readerQuotas maxDepth="2147483647" maxArrayLength="2147483647" maxBytesPerRead="2147483647" maxNameTableCharCount="2147483647" maxStringContentLength="2147483647"/> </binding> </webHttpBinding> <basicHttpBinding> <binding maxReceivedMessageSize="2147483647"> <readerQuotas maxDepth="2147483647" maxArrayLength="2147483647" maxBytesPerRead="2147483647" maxNameTableCharCount="2147483647" maxStringContentLength="2147483647"/> </binding> </basicHttpBinding> ,webHttpBinding 主要用于get或post协议

CocosCreator之KUOKUO带你做物理切割(第二部分)

摘要 物理切割第二部分,切割多个物体,利用 Mask 切割图片! 正文 使用版本 CocosCreator 版本 2.1.3 最终效果 多切割原理 通过上一部分的教程,我们已经知道了单切割的原理,但是很显然,KUOKUO 的第一篇博客显得不通用,只能切割一个物体。那么如何切割多个物体呢? 第一步:分类,将不同碰撞体的点放入一个数组第二步:排除,将同碰撞体内部的点干掉第三步:排序,按照顺序两两分组,两两切割 第一步和第二步放在一起做,其中排除碰撞体内部的点很简单,两个结果合并,找同一点! const result1 = cc.director.getPhysicsManager().rayCast(point1, point2, cc.RayCastType.All); const result2 = cc.director.getPhysicsManager().rayCast(point2, point1, cc.RayCastType.All); // 将结果二的方向反过来 result2.forEach(r => { r.fraction = 1 - r.fraction; }); // 将结果合并 const results = result1.concat(result2); cc.log(results); // 然后我们将结果进行分类 let pairs = []; for (let i = 0; i < results.length; i++) { let find = false; let result = results[i]; for (let j = 0; j < pairs.

vue集成汉字转拼音并提取首字母

此方法是利用汉字和Unicode编码对应找到相应字母 一、编写汉字和编码文件对应的js; pyconst.js export const pinyin = { 'a': '\u554a\u963f\u9515', 'ai': '\u57c3\u6328\u54ce\u5509\u54c0\u7691\u764c\u853c\u77ee\u827e\u788d\u7231\u9698\u8bf6\u6371\u55f3\u55cc\u5ad2\u7477\u66a7\u7839\u953f\u972d', 'an': '\u978d\u6c28\u5b89\u4ffa\u6309\u6697\u5cb8\u80fa\u6848\u8c19\u57ef\u63de\u72b4\u5eb5\u6849\u94f5\u9e4c\u9878\u9eef', 'ang': '\u80ae\u6602\u76ce', 'ao': '\u51f9\u6556\u71ac\u7ff1\u8884\u50b2\u5965\u61ca\u6fb3\u5773\u62d7\u55f7\u5662\u5c99\u5ed2\u9068\u5aaa\u9a9c\u8071\u87af\u93ca\u9ccc\u93d6', 'ba': '\u82ad\u634c\u6252\u53ed\u5427\u7b06\u516b\u75a4\u5df4\u62d4\u8dcb\u9776\u628a\u8019\u575d\u9738\u7f62\u7238\u8307\u83dd\u8406\u636d\u5c9c\u705e\u6777\u94af\u7c91\u9c85\u9b43', 'bai': '\u767d\u67cf\u767e\u6446\u4f70\u8d25\u62dc\u7a17\u859c\u63b0\u97b4', 'ban': '\u6591\u73ed\u642c\u6273\u822c\u9881\u677f\u7248\u626e\u62cc\u4f34\u74e3\u534a\u529e\u7eca\u962a\u5742\u8c73\u94a3\u7622\u764d\u8228', 'bang': '\u90a6\u5e2e\u6886\u699c\u8180\u7ed1\u68d2\u78c5\u868c\u9551\u508d\u8c24\u84a1\u8783', 'bao': '\u82de\u80de\u5305\u8912\u96f9\u4fdd\u5821\u9971\u5b9d\u62b1\u62a5\u66b4\u8c79\u9c8d\u7206\u52f9\u8446\u5b80\u5b62\u7172\u9e28\u8913\u8db5\u9f85', 'bo': '\u5265\u8584\u73bb\u83e0\u64ad\u62e8\u94b5\u6ce2\u535a\u52c3\u640f\u94c2\u7b94\u4f2f\u5e1b\u8236\u8116\u818a\u6e24\u6cca\u9a73\u4eb3\u8543\u5575\u997d\u6a97\u64d8\u7934\u94b9\u9e41\u7c38\u8ddb', 'bei': '\u676f\u7891\u60b2\u5351\u5317\u8f88\u80cc\u8d1d\u94a1\u500d\u72c8\u5907\u60eb\u7119\u88ab\u5b5b\u9642\u90b6\u57e4\u84d3\u5457\u602b\u6096\u789a\u9e4e\u8919\u943e', 'ben': '\u5954\u82ef\u672c\u7b28\u755a\u574c\u951b', 'beng': '\u5d29\u7ef7\u752d\u6cf5\u8e66\u8ff8\u552a\u5623\u750f', 'bi': '\u903c\u9f3b\u6bd4\u9119\u7b14\u5f7c\u78a7\u84d6\u853d\u6bd5\u6bd9\u6bd6\u5e01\u5e87\u75f9\u95ed\u655d\u5f0a\u5fc5\u8f9f\u58c1\u81c2\u907f\u965b\u5315\u4ef3\u4ffe\u8298\u835c\u8378\u5421\u54d4\u72f4\u5eb3\u610e\u6ed7\u6fde\u5f3c\u59a3\u5a62\u5b16\u74a7\u8d32\u7540\u94cb\u79d5\u88e8\u7b5a\u7b85\u7be6\u822d\u895e\u8df8\u9ac0', 'bian': '\u97ad\u8fb9\u7f16\u8d2c\u6241\u4fbf\u53d8\u535e\u8fa8\u8fa9\u8fab\u904d\u533e\u5f01\u82c4\u5fed\u6c74\u7f0f\u7178\u782d\u78a5\u7a39\u7a86\u8759\u7b3e\u9cca', 'biao': '\u6807\u5f6a\u8198\u8868\u5a4a\u9aa0\u98d1\u98d9\u98da\u706c\u9556\u9573\u762d\u88f1\u9cd4', 'bie': '\u9cd6\u618b\u522b\u762a\u8e69\u9cd8', 'bin': '\u5f6c\u658c\u6fd2\u6ee8\u5bbe\u6448\u50a7\u6d5c\u7f24\u73a2\u6ba1\u8191\u9554\u9acc\u9b13', 'bing': '\u5175\u51b0\u67c4\u4e19\u79c9\u997c\u70b3\u75c5\u5e76\u7980\u90b4\u6452\u7ee0\u678b\u69df\u71f9', 'bu': '\u6355\u535c\u54fa\u8865\u57e0\u4e0d\u5e03\u6b65\u7c3f\u90e8\u6016\u62ca\u535f\u900b\u74ff\u6661\u949a\u91ad', 'ca': '\u64e6\u5693\u7924', 'cai': '\u731c\u88c1\u6750\u624d\u8d22\u776c\u8e29\u91c7\u5f69\u83dc\u8521', 'can': '\u9910\u53c2\u8695\u6b8b\u60ed\u60e8\u707f\u9a96\u74a8\u7cb2\u9eea', 'cang': '\u82cd\u8231\u4ed3\u6ca7\u85cf\u4f27', 'cao': '\u64cd\u7cd9\u69fd\u66f9\u8349\u8279\u5608\u6f15\u87ac\u825a', 'ce': '\u5395\u7b56\u4fa7\u518c\u6d4b\u5202\u5e3b\u607b', 'ceng': '\u5c42\u8e6d\u564c', 'cha': '\u63d2\u53c9\u832c\u8336\u67e5\u78b4\u643d\u5bdf\u5c94\u5dee\u8be7\u7339\u9987\u6c4a\u59f9\u6748\u6942\u69ce\u6aab\u9497\u9538\u9572\u8869', 'chai': '\u62c6\u67f4\u8c7a\u4faa\u8308\u7625\u867f\u9f87', 'chan': '\u6400\u63ba\u8749\u998b\u8c17\u7f20\u94f2\u4ea7\u9610\u98a4\u5181\u8c04\u8c36\u8487\u5edb\u5fcf\u6f7a\u6fb6\u5b71\u7fbc\u5a75\u5b17\u9aa3\u89c7\u7985\u9561\u88e3\u87fe\u8e94', 'chang': '\u660c\u7316\u573a\u5c1d\u5e38\u957f\u507f\u80a0\u5382\u655e\u7545\u5531\u5021\u4f25\u9b2f\u82cc\u83d6\u5f9c\u6005\u60dd\u960a\u5a3c\u5ae6\u6636\u6c05\u9cb3', 'chao': '\u8d85\u6284\u949e\u671d\u5632\u6f6e\u5de2\u5435\u7092\u600a\u7ec9\u6641\u8016', 'che': '\u8f66\u626f\u64a4\u63a3\u5f7b\u6f88\u577c\u5c6e\u7817', 'chen': '\u90f4\u81e3\u8fb0\u5c18\u6668\u5ff1\u6c89\u9648\u8d81\u886c\u79f0\u8c0c\u62bb\u55d4\u5bb8\u741b\u6987\u809c\u80c2\u789c\u9f80', 'cheng': '\u6491\u57ce\u6a59\u6210\u5448\u4e58\u7a0b\u60e9\u6f84\u8bda\u627f\u901e\u9a8b\u79e4\u57d5\u5d4a\u5fb5\u6d48\u67a8\u67fd\u6a18\u665f\u584d\u77a0\u94d6\u88ce\u86cf\u9172', 'chi': '\u5403\u75f4\u6301\u5319\u6c60\u8fdf\u5f1b\u9a70\u803b\u9f7f\u4f88\u5c3a\u8d64\u7fc5\u65a5\u70bd\u50ba\u5880\u82aa\u830c\u640b\u53f1\u54e7\u557b\u55e4\u5f73\u996c\u6cb2\u5ab8\u6555\u80dd\u7719\u7735\u9e31\u761b\u892b\u86a9\u87ad\u7b1e\u7bea\u8c49\u8e05\u8e1f\u9b51', 'chong': '\u5145\u51b2\u866b\u5d07\u5ba0\u833a\u5fe1\u61a7\u94f3\u825f', 'chou': '\u62bd\u916c\u7574\u8e0c\u7a20\u6101\u7b79\u4ec7\u7ef8\u7785\u4e11\u4fe6\u5733\u5e31\u60c6\u6eb4\u59af\u7633\u96e0\u9c8b', 'chu': '\u81ed\u521d\u51fa\u6a71\u53a8\u8e87\u9504\u96cf\u6ec1\u9664\u695a\u7840\u50a8\u77d7\u6410\u89e6\u5904\u4e8d\u520d\u61b7\u7ecc\u6775\u696e\u6a17\u870d\u8e70\u9edc', 'chuan': '\u63e3\u5ddd\u7a7f\u693d\u4f20\u8239\u5598\u4e32\u63be\u821b\u60f4\u9044\u5ddb\u6c1a\u948f\u9569\u8221', 'chuang': '\u75ae\u7a97\u5e62\u5e8a\u95ef\u521b\u6006', 'chui': '\u5439\u708a\u6376\u9524\u5782\u9672\u68f0\u69cc', 'chun': '\u6625\u693f\u9187\u5507\u6df3\u7eaf\u8822\u4fc3\u83bc\u6c8c\u80ab\u6710\u9e51\u877d', 'chuo': '\u6233\u7ef0\u851f\u8fb6\u8f8d\u955e\u8e14\u9f8a', 'ci': '\u75b5\u8328\u78c1\u96cc\u8f9e\u6148\u74f7\u8bcd\u6b64\u523a\u8d50\u6b21\u8360\u5472\u5d6f\u9e5a\u8785\u7ccd\u8d91', 'cong': '\u806a\u8471\u56f1\u5306\u4ece\u4e1b\u506c\u82c1\u6dd9\u9aa2\u742e\u7481\u679e', 'cu': '\u51d1\u7c97\u918b\u7c07\u731d\u6b82\u8e59', 'cuan': '\u8e7f\u7be1\u7a9c\u6c46\u64ba\u6615\u7228', 'cui': '\u6467\u5d14\u50ac\u8106\u7601\u7cb9\u6dec\u7fe0\u8403\u60b4\u7480\u69b1\u96b9', 'cun': '\u6751\u5b58\u5bf8\u78cb\u5fd6\u76b4', 'cuo': '\u64ae\u6413\u63aa\u632b\u9519\u539d\u811e\u9509\u77ec\u75e4\u9e7e\u8e49\u8e9c', 'da': '\u642d\u8fbe\u7b54\u7629\u6253\u5927\u8037\u54d2\u55d2\u601b\u59b2\u75b8\u8921\u7b2a\u977c\u9791', 'dai': '\u5446\u6b79\u50a3\u6234\u5e26\u6b86\u4ee3\u8d37\u888b\u5f85\u902e\u6020\u57ed\u7519\u5454\u5cb1\u8fe8\u902f\u9a80\u7ed0\u73b3\u9edb', 'dan': '\u803d\u62c5\u4e39\u5355\u90f8\u63b8\u80c6\u65e6\u6c2e\u4f46\u60ee\u6de1\u8bde\u5f39\u86cb\u4ebb\u510b\u5369\u840f\u5556\u6fb9\u6a90\u6b9a\u8d55\u7708\u7605\u8043\u7baa', 'dang': '\u5f53\u6321\u515a\u8361\u6863\u8c20\u51fc\u83ea\u5b95\u7800\u94db\u88c6', 'dao': '\u5200\u6363\u8e48\u5012\u5c9b\u7977\u5bfc\u5230\u7a3b\u60bc\u9053\u76d7\u53e8\u5541\u5fc9\u6d2e\u6c18\u7118\u5fd1\u7e9b', 'de': '\u5fb7\u5f97\u7684\u951d', 'deng': '\u8e6c\u706f\u767b\u7b49\u77aa\u51f3\u9093\u5654\u5d9d\u6225\u78f4\u956b\u7c26', 'di': '\u5824\u4f4e\u6ef4\u8fea\u654c\u7b1b\u72c4\u6da4\u7fdf\u5ae1\u62b5\u5e95\u5730\u8482\u7b2c\u5e1d\u5f1f\u9012\u7f14\u6c10\u7c74\u8bcb\u8c1b\u90b8\u577b\u839c\u837b\u5600\u5a23\u67e2\u68e3\u89cc\u7825\u78b2\u7747\u955d\u7f9d\u9ab6', 'dian': '\u98a0\u6382\u6ec7\u7898\u70b9\u5178\u975b\u57ab\u7535\u4f43\u7538\u5e97\u60e6\u5960\u6dc0\u6bbf\u4e36\u963d\u576b\u57dd\u5dc5\u73b7\u765c\u766b\u7c1f\u8e2e', 'diao': '\u7889\u53fc\u96d5\u51cb\u5201\u6389\u540a\u9493\u8c03\u8f7a\u94de\u8729\u7c9c\u8c82', 'die': '\u8dcc\u7239\u789f\u8776\u8fed\u8c0d\u53e0\u4f5a\u57a4\u581e\u63f2\u558b\u6e2b\u8f76\u7252\u74de\u8936\u800b\u8e40\u9cbd\u9cce', 'ding': '\u4e01\u76ef\u53ee\u9489\u9876\u9f0e\u952d\u5b9a\u8ba2\u4e22\u4ec3\u5576\u738e\u815a\u7887\u753a\u94e4\u7594\u8035\u914a', 'dong': '\u4e1c\u51ac\u8463\u61c2\u52a8\u680b\u4f97\u606b\u51bb\u6d1e\u578c\u549a\u5cbd\u5cd2\u5902\u6c21\u80e8\u80f4\u7850\u9e2b', 'dou': '\u515c\u6296\u6597\u9661\u8c46\u9017\u75d8\u8538\u94ad\u7aa6\u7aac\u86aa\u7bfc\u9161', 'du': '\u90fd\u7763\u6bd2\u728a\u72ec\u8bfb\u5835\u7779\u8d4c\u675c\u9540\u809a\u5ea6\u6e21\u5992\u828f\u561f\u6e0e\u691f\u6a50\u724d\u8839\u7b03\u9ad1\u9ee9', 'duan': '\u7aef\u77ed\u953b\u6bb5\u65ad\u7f0e\u5f56\u6934\u7145\u7c16', 'dui': '\u5806\u5151\u961f\u5bf9\u603c\u619d\u7893', 'dun': '\u58a9\u5428\u8e72\u6566\u987f\u56e4\u949d\u76fe\u9041\u7096\u7818\u7905\u76f9\u9566\u8db8', 'duo': '\u6387\u54c6\u591a\u593a\u579b\u8eb2\u6735\u8dfa\u8235\u5241\u60f0\u5815\u5484\u54da\u7f0d\u67c1\u94ce\u88f0\u8e31', 'e': '\u86fe\u5ce8\u9e45\u4fc4\u989d\u8bb9\u5a25\u6076\u5384\u627c\u904f\u9102\u997f\u5669\u8c14\u57a9\u57ad\u82ca\u83aa\u843c\u5443\u6115\u5c59\u5a40\u8f6d\u66f7\u816d\u786a\u9507\u9537\u9e57\u989a\u9cc4', 'en': '\u6069\u84bd\u6441\u5514\u55ef', 'er': '\u800c\u513f\u8033\u5c14\u9975\u6d31\u4e8c\u8d30\u8fe9\u73e5\u94d2\u9e38\u9c95', 'fa': '\u53d1\u7f5a\u7b4f\u4f10\u4e4f\u9600\u6cd5\u73d0\u57a1\u781d', 'fan': '\u85e9\u5e06\u756a\u7ffb\u6a0a\u77fe\u9492\u7e41\u51e1\u70e6\u53cd\u8fd4\u8303\u8d29\u72af\u996d\u6cdb\u8629\u5e61\u72ad\u68b5\u6535\u71d4\u7548\u8e6f', 'fang': '\u574a\u82b3\u65b9\u80aa\u623f\u9632\u59a8\u4eff\u8bbf\u7eba\u653e\u531a\u90a1\u5f77\u94ab\u822b\u9c82', 'fei': '\u83f2\u975e\u5561\u98de\u80a5\u532a\u8bfd\u5420\u80ba\u5e9f\u6cb8\u8d39\u82be\u72d2\u60b1\u6ddd\u5983\u7ecb\u7eef\u69a7\u8153\u6590\u6249\u7953\u7829\u9544\u75f1\u871a\u7bda\u7fe1\u970f\u9cb1', 'fen': '\u82ac\u915a\u5429\u6c1b\u5206\u7eb7\u575f\u711a\u6c7e\u7c89\u594b\u4efd\u5fff\u6124\u7caa\u507e\u7035\u68fc\u610d\u9cbc\u9f22', 'feng': '\u4e30\u5c01\u67ab\u8702\u5cf0\u950b\u98ce\u75af\u70fd\u9022\u51af\u7f1d\u8bbd\u5949\u51e4\u4ff8\u9146\u8451\u6ca3\u781c', 'fu': '\u4f5b\u5426\u592b\u6577\u80a4\u5b75\u6276\u62c2\u8f90\u5e45\u6c1f\u7b26\u4f0f\u4fd8\u670d\u6d6e\u6daa\u798f\u88b1\u5f17\u752b\u629a\u8f85\u4fef\u91dc\u65a7\u812f\u8151\u5e9c\u8150\u8d74\u526f\u8986\u8d4b\u590d\u5085\u4ed8\u961c\u7236\u8179\u8d1f\u5bcc\u8ba3\u9644\u5987\u7f1a\u5490\u5310\u51eb\u90db\u8299\u82fb\u832f\u83a9\u83d4\u544b\u5e5e\u6ecf\u8274\u5b5a\u9a78\u7ec2\u6874\u8d59\u9efb\u9efc\u7f58\u7a03\u99a5\u864d\u86a8\u8709\u8760\u876e\u9eb8\u8dba\u8dd7\u9cc6', 'ga': '\u5676\u560e\u86e4\u5c2c\u5477\u5c15\u5c1c\u65ee\u9486', 'gai': '\u8be5\u6539\u6982\u9499\u76d6\u6e89\u4e10\u9654\u5793\u6224\u8d45\u80f2', 'gan': '\u5e72\u7518\u6746\u67d1\u7aff\u809d\u8d76\u611f\u79c6\u6562\u8d63\u5769\u82f7\u5c34\u64c0\u6cd4\u6de6\u6f89\u7ec0\u6a44\u65f0\u77f8\u75b3\u9150', 'gang': '\u5188\u521a\u94a2\u7f38\u809b\u7eb2\u5c97\u6e2f\u6206\u7f61\u9883\u7b7b', 'gong': '\u6760\u5de5\u653b\u529f\u606d\u9f9a\u4f9b\u8eac\u516c\u5bab\u5f13\u5de9\u6c5e\u62f1\u8d21\u5171\u857b\u5efe\u54a3\u73d9\u80b1\u86a3\u86e9\u89e5', 'gao': '\u7bd9\u768b\u9ad8\u818f\u7f94\u7cd5\u641e\u9550\u7a3f\u544a\u777e\u8bf0\u90dc\u84bf\u85c1\u7f1f\u69d4\u69c1\u6772\u9506', 'ge': '\u54e5\u6b4c\u6401\u6208\u9e3d\u80f3\u7599\u5272\u9769\u845b\u683c\u9601\u9694\u94ec\u4e2a\u5404\u9b32\u4ee1\u54ff\u5865\u55dd\u7ea5\u643f\u8188\u784c\u94ea\u9549\u88bc\u988c\u867c\u8238\u9abc\u9ac2', 'gei': '\u7ed9', 'gen': '\u6839\u8ddf\u4e98\u831b\u54cf\u826e', 'geng': '\u8015\u66f4\u5e9a\u7fb9\u57c2\u803f\u6897\u54fd\u8d53\u9ca0', 'gou': '\u94a9\u52fe\u6c9f\u82df\u72d7\u57a2\u6784\u8d2d\u591f\u4f5d\u8bdf\u5ca3\u9058\u5abe\u7f11\u89cf\u5f40\u9e32\u7b31\u7bdd\u97b2', 'gu': '\u8f9c\u83c7\u5495\u7b8d\u4f30\u6cbd\u5b64\u59d1\u9f13\u53e4\u86ca\u9aa8\u8c37\u80a1\u6545\u987e\u56fa\u96c7\u560f\u8bc2\u83f0\u54cc\u5d2e\u6c69\u688f\u8f71\u726f\u727f\u80cd\u81cc\u6bc2\u77bd\u7f5f\u94b4\u9522\u74e0\u9e2a\u9e44\u75fc\u86c4\u9164\u89da\u9cb4\u9ab0\u9e58', 'gua': '\u522e\u74dc\u5250\u5be1\u6302\u8902\u5366\u8bd6\u5471\u681d\u9e39', 'guai': '\u4e56\u62d0\u602a\u54d9', 'guan': '\u68fa\u5173\u5b98\u51a0\u89c2\u7ba1\u9986\u7f50\u60ef\u704c\u8d2f\u500c\u839e\u63bc\u6dab\u76e5\u9e73\u9ccf', 'guang': '\u5149\u5e7f\u901b\u72b7\u6844\u80f1\u7592', 'gui': '\u7470\u89c4\u572d\u7845\u5f52\u9f9f\u95fa\u8f68\u9b3c\u8be1\u7678\u6842\u67dc\u8dea\u8d35\u523d\u5326\u523f\u5e8b\u5b84\u59ab\u6867\u7085\u6677\u7688\u7c0b\u9c91\u9cdc', 'gun': '\u8f8a\u6eda\u68cd\u4e28\u886e\u7ef2\u78d9\u9ca7', 'guo': '\u9505\u90ed\u56fd\u679c\u88f9\u8fc7\u9998\u8803\u57da\u63b4\u5459\u56d7\u5e3c\u5d1e\u7313\u6901\u8662\u951e\u8052\u872e\u873e\u8748', 'ha': '\u54c8', 'hai': '\u9ab8\u5b69\u6d77\u6c26\u4ea5\u5bb3\u9a87\u54b4\u55e8\u988f\u91a2', 'han': '\u9163\u61a8\u90af\u97e9\u542b\u6db5\u5bd2\u51fd\u558a\u7f55\u7ff0\u64bc\u634d\u65f1\u61be\u608d\u710a\u6c57\u6c49\u9097\u83e1\u6496\u961a\u701a\u6657\u7113\u9894\u86b6\u9f3e', 'hen': '\u592f\u75d5\u5f88\u72e0\u6068', 'hang': '\u676d\u822a\u6c86\u7ed7\u73e9\u6841', 'hao': '\u58d5\u568e\u8c6a\u6beb\u90dd\u597d\u8017\u53f7\u6d69\u8585\u55e5\u5686\u6fe0\u704f\u660a\u7693\u98a2\u869d', 'he': '\u5475\u559d\u8377\u83cf\u6838\u79be\u548c\u4f55\u5408\u76d2\u8c89\u9602\u6cb3\u6db8\u8d6b\u8910\u9e64\u8d3a\u8bc3\u52be\u58d1\u85ff\u55d1\u55ec\u9616\u76cd\u86b5\u7fee', 'hei': '\u563f\u9ed1', 'heng': '\u54fc\u4ea8\u6a2a\u8861\u6052\u8a07\u8605', 'hong': '\u8f70\u54c4\u70d8\u8679\u9e3f\u6d2a\u5b8f\u5f18\u7ea2\u9ec9\u8ba7\u836d\u85a8\u95f3\u6cd3', 'hou': '\u5589\u4faf\u7334\u543c\u539a\u5019\u540e\u5820\u5f8c\u9005\u760a\u7bcc\u7cc7\u9c8e\u9aba', 'hu': '\u547c\u4e4e\u5ffd\u745a\u58f6\u846b\u80e1\u8774\u72d0\u7cca\u6e56\u5f27\u864e\u552c\u62a4\u4e92\u6caa\u6237\u51b1\u553f\u56eb\u5cb5\u7322\u6019\u60da\u6d52\u6ef9\u7425\u69f2\u8f77\u89f3\u70c0\u7173\u623d\u6248\u795c\u9e55\u9e71\u7b0f\u9190\u659b', 'hua': '\u82b1\u54d7\u534e\u733e\u6ed1\u753b\u5212\u5316\u8bdd\u5290\u6d4d\u9a85\u6866\u94e7\u7a1e', 'huai': '\u69d0\u5f8a\u6000\u6dee\u574f\u8fd8\u8e1d', 'huan': '\u6b22\u73af\u6853\u7f13\u6362\u60a3\u5524\u75ea\u8c62\u7115\u6da3\u5ba6\u5e7b\u90c7\u5942\u57b8\u64d0\u571c\u6d39\u6d63\u6f36\u5bf0\u902d\u7f33\u953e\u9ca9\u9b1f', 'huang': '\u8352\u614c\u9ec4\u78fa\u8757\u7c27\u7687\u51f0\u60f6\u714c\u6643\u5e4c\u604d\u8c0e\u968d\u5fa8\u6e5f\u6f62\u9051\u749c\u8093\u7640\u87e5\u7bc1\u9cc7', 'hui': '\u7070\u6325\u8f89\u5fbd\u6062\u86d4\u56de\u6bc1\u6094\u6167\u5349\u60e0\u6666\u8d3f\u79fd\u4f1a\u70e9\u6c47\u8bb3\u8bf2\u7ed8\u8bd9\u8334\u835f\u8559\u54d5\u5599\u96b3\u6d04\u5f57\u7f0b\u73f2\u6656\u605a\u867a\u87ea\u9ebe', 'hun': '\u8364\u660f\u5a5a\u9b42\u6d51\u6df7\u8be8\u9984\u960d\u6eb7\u7f17', 'huo': '\u8c41\u6d3b\u4f19\u706b\u83b7\u6216\u60d1\u970d\u8d27\u7978\u6509\u56af\u5925\u94ac\u952a\u956c\u8020\u8816', 'ji': '\u51fb\u573e\u57fa\u673a\u7578\u7a3d\u79ef\u7b95\u808c\u9965\u8ff9\u6fc0\u8ba5\u9e21\u59ec\u7ee9\u7f09\u5409\u6781\u68d8\u8f91\u7c4d\u96c6\u53ca\u6025\u75be\u6c72\u5373\u5ac9\u7ea7\u6324\u51e0\u810a\u5df1\u84df\u6280\u5180\u5b63\u4f0e\u796d\u5242\u60b8\u6d4e\u5bc4\u5bc2\u8ba1\u8bb0\u65e2\u5fcc\u9645\u5993\u7ee7\u7eaa\u5c45\u4e0c\u4e69\u525e\u4f76\u4f74\u8114\u58bc\u82a8\u82b0\u8401\u84ba\u857a\u638e\u53fd\u54ad\u54dc\u5527\u5c8c\u5d74\u6d0e\u5f50\u5c50\u9aa5\u757f\u7391\u696b\u6b9b\u621f\u6222\u8d4d\u89ca\u7284\u9f51\u77f6\u7f81\u5d47\u7a37\u7620\u7635\u866e\u7b08\u7b04\u66a8\u8dfb\u8dfd\u9701\u9c9a\u9cab\u9afb\u9e82', 'jia': '\u5609\u67b7\u5939\u4f73\u5bb6\u52a0\u835a\u988a\u8d3e\u7532\u94be\u5047\u7a3c\u4ef7\u67b6\u9a7e\u5ac1\u4f3d\u90cf\u62ee\u5cac\u6d43\u8fe6\u73c8\u621b\u80db\u605d\u94d7\u9553\u75c2\u86f1\u7b33\u8888\u8dcf', 'jian': '\u6b7c\u76d1\u575a\u5c16\u7b3a\u95f4\u714e\u517c\u80a9\u8270\u5978\u7f04\u8327\u68c0\u67ec\u78b1\u7877\u62e3\u6361\u7b80\u4fed\u526a\u51cf\u8350\u69db\u9274\u8df5\u8d31\u89c1\u952e\u7bad\u4ef6\u5065\u8230\u5251\u996f\u6e10\u6e85\u6da7\u5efa\u50ed\u8c0f\u8c2b\u83c5\u84b9\u641b\u56dd\u6e54\u8e47\u8b07\u7f23\u67a7\u67d9\u6957\u620b\u622c\u726e\u728d\u6bfd\u8171\u7751\u950f\u9e63\u88e5\u7b15\u7bb4\u7fe6\u8dbc\u8e3a\u9ca3\u97af', 'jiang': '\u50f5\u59dc\u5c06\u6d46\u6c5f\u7586\u848b\u6868\u5956\u8bb2\u5320\u9171\u964d\u8333\u6d1a\u7edb\u7f30\u729f\u7913\u8029\u7ce8\u8c47', 'jiao': '\u8549\u6912\u7901\u7126\u80f6\u4ea4\u90ca\u6d47\u9a84\u5a07\u56bc\u6405\u94f0\u77eb\u4fa5\u811a\u72e1\u89d2\u997a\u7f34\u7ede\u527f\u6559\u9175\u8f7f\u8f83\u53eb\u4f7c\u50ec\u832d\u6322\u564d\u5ce4\u5fbc\u59e3\u7e9f\u656b\u768e\u9e6a\u86df\u91ae\u8de4\u9c9b', 'jie': '\u7a96\u63ed\u63a5\u7686\u79f8\u8857\u9636\u622a\u52ab\u8282\u6854\u6770\u6377\u776b\u7aed\u6d01\u7ed3\u89e3\u59d0\u6212\u85c9\u82a5\u754c\u501f\u4ecb\u75a5\u8beb\u5c4a\u5048\u8ba6\u8bd8\u5588\u55df\u736c\u5a55\u5b51\u6840\u7352\u78a3\u9534\u7596\u88b7\u9889\u86a7\u7faf\u9c92\u9ab1\u9aeb', 'jin': '\u5dfe\u7b4b\u65a4\u91d1\u4eca\u6d25\u895f\u7d27\u9526\u4ec5\u8c28\u8fdb\u9773\u664b\u7981\u8fd1\u70ec\u6d78\u5c3d\u537a\u8369\u5807\u5664\u9991\u5ed1\u5997\u7f19\u747e\u69ff\u8d46\u89d0\u9485\u9513\u887f\u77dc', 'jing': '\u52b2\u8346\u5162\u830e\u775b\u6676\u9cb8\u4eac\u60ca\u7cbe\u7cb3\u7ecf\u4e95\u8b66\u666f\u9888\u9759\u5883\u656c\u955c\u5f84\u75c9\u9756\u7adf\u7ade\u51c0\u522d\u5106\u9631\u83c1\u734d\u61ac\u6cfe\u8ff3\u5f2a\u5a67\u80bc\u80eb\u8148\u65cc', 'jiong': '\u70af\u7a98\u5182\u8fe5\u6243', 'jiu': '\u63ea\u7a76\u7ea0\u7396\u97ed\u4e45\u7078\u4e5d\u9152\u53a9\u6551\u65e7\u81fc\u8205\u548e\u5c31\u759a\u50e6\u557e\u9604\u67e9\u6855\u9e6b\u8d73\u9b0f', 'ju': '\u97a0\u62d8\u72d9\u75bd\u9a79\u83ca\u5c40\u5480\u77e9\u4e3e\u6cae\u805a\u62d2\u636e\u5de8\u5177\u8ddd\u8e1e\u952f\u4ff1\u53e5\u60e7\u70ac\u5267\u5028\u8bb5\u82e3\u82f4\u8392\u63ac\u907d\u5c66\u741a\u67b8\u6910\u6998\u6989\u6a58\u728b\u98d3\u949c\u9514\u7aad\u88fe\u8d84\u91b5\u8e3d\u9f83\u96ce\u97ab', 'juan': '\u6350\u9e43\u5a1f\u5026\u7737\u5377\u7ee2\u9104\u72f7\u6d93\u684a\u8832\u9529\u954c\u96bd', 'jue': '\u6485\u652b\u6289\u6398\u5014\u7235\u89c9\u51b3\u8bc0\u7edd\u53a5\u5282\u8c32\u77cd\u8568\u5658\u5d1b\u7357\u5b53\u73cf\u6877\u6a5b\u721d\u9562\u8e76\u89d6', 'jun': '\u5747\u83cc\u94a7\u519b\u541b\u5cfb\u4fca\u7ae3\u6d5a\u90e1\u9a8f\u6343\u72fb\u76b2\u7b60\u9e87', 'ka': '\u5580\u5496\u5361\u4f67\u5494\u80e9', 'ke': '\u54af\u5777\u82db\u67ef\u68f5\u78d5\u9897\u79d1\u58f3\u54b3\u53ef\u6e34\u514b\u523b\u5ba2\u8bfe\u5ca2\u606a\u6e98\u9a92\u7f02\u73c2\u8f72\u6c2a\u778c\u94b6\u75b4\u7aa0\u874c\u9ac1', 'kai': '\u5f00\u63e9\u6977\u51ef\u6168\u5240\u57b2\u8488\u5ffe\u607a\u94e0\u950e', 'kan': '\u520a\u582a\u52d8\u574e\u780d\u770b\u4f83\u51f5\u83b0\u83b6\u6221\u9f9b\u77b0', 'kang': '\u5eb7\u6177\u7ce0\u625b\u6297\u4ea2\u7095\u5751\u4f09\u95f6\u94aa', 'kao': '\u8003\u62f7\u70e4\u9760\u5c3b\u6832\u7292\u94d0', 'ken': '\u80af\u5543\u57a6\u6073\u57a0\u88c9\u9880', 'keng': '\u542d\u5fd0\u94ff', 'kong': '\u7a7a\u6050\u5b54\u63a7\u5025\u5d06\u7b9c', 'kou': '\u62a0\u53e3\u6263\u5bc7\u82a4\u853b\u53e9\u770d\u7b58', 'ku': '\u67af\u54ed\u7a9f\u82e6\u9177\u5e93\u88e4\u5233\u5800\u55be\u7ed4\u9ab7', 'kua': '\u5938\u57ae\u630e\u8de8\u80ef\u4f89', 'kuai': '\u5757\u7b77\u4fa9\u5feb\u84af\u90d0\u8489\u72ef\u810d', 'kuan': '\u5bbd\u6b3e\u9acb', 'kuang': '\u5321\u7b50\u72c2\u6846\u77ff\u7736\u65f7\u51b5\u8bd3\u8bf3\u909d\u5739\u593c\u54d0\u7ea9\u8d36', 'kui': '\u4e8f\u76d4\u5cbf\u7aa5\u8475\u594e\u9b41\u5080\u9988\u6127\u6e83\u9997\u532e\u5914\u9697\u63c6\u55b9\u559f\u609d\u6126\u9615\u9035\u668c\u777d\u8069\u8770\u7bd1\u81fe\u8dec', 'kun': '\u5764\u6606\u6346\u56f0\u6083\u9603\u7428\u951f\u918c\u9cb2\u9ae1', 'kuo': '\u62ec\u6269\u5ed3\u9614\u86de', 'la': '\u5783\u62c9\u5587\u8721\u814a\u8fa3\u5566\u524c\u647a\u908b\u65ef\u782c\u760c', 'lai': '\u83b1\u6765\u8d56\u5d03\u5f95\u6d9e\u6fd1\u8d49\u7750\u94fc\u765e\u7c41', 'lan': '\u84dd\u5a6a\u680f\u62e6\u7bee\u9611\u5170\u6f9c\u8c30\u63fd\u89c8\u61d2\u7f06\u70c2\u6ee5\u5549\u5c9a\u61d4\u6f24\u6984\u6593\u7f71\u9567\u8934', 'lang': '\u7405\u6994\u72fc\u5eca\u90ce\u6717\u6d6a\u83a8\u8497\u5577\u9606\u9512\u7a02\u8782', 'lao': '\u635e\u52b3\u7262\u8001\u4f6c\u59e5\u916a\u70d9\u6d9d\u5520\u5d02\u6833\u94d1\u94f9\u75e8\u91aa', 'le': '\u52d2\u4e50\u808b\u4ec2\u53fb\u561e\u6cd0\u9cd3', 'lei': '\u96f7\u956d\u857e\u78ca\u7d2f\u5121\u5792\u64c2\u7c7b\u6cea\u7fb8\u8bd4\u837d\u54a7\u6f2f\u5ad8\u7f27\u6a91\u8012\u9179', 'ling': '\u68f1\u51b7\u62ce\u73b2\u83f1\u96f6\u9f84\u94c3\u4f36\u7f9a\u51cc\u7075\u9675\u5cad\u9886\u53e6\u4ee4\u9143\u5844\u82d3\u5464\u56f9\u6ce0\u7eeb\u67c3\u68c2\u74f4\u8046\u86c9\u7fce\u9cae', 'leng': '\u695e\u6123', 'li': '\u5398\u68a8\u7281\u9ece\u7bf1\u72f8\u79bb\u6f13\u7406\u674e\u91cc\u9ca4\u793c\u8389\u8354\u540f\u6817\u4e3d\u5389\u52b1\u783e\u5386\u5229\u5088\u4f8b\u4fd0\u75e2\u7acb\u7c92\u6ca5\u96b6\u529b\u7483\u54e9\u4fea\u4fda\u90e6\u575c\u82c8\u8385\u84e0\u85dc\u6369\u5456\u5533\u55b1\u7301\u6ea7\u6fa7\u9026\u5a0c\u5ae0\u9a8a\u7f21\u73de\u67a5\u680e\u8f79\u623e\u783a\u8a48\u7f79\u9502\u9e42\u75a0\u75ac\u86ce\u870a\u8821\u7b20\u7be5\u7c9d\u91b4\u8dde\u96f3\u9ca1\u9ce2\u9ee7', 'lian': '\u4fe9\u8054\u83b2\u8fde\u9570\u5ec9\u601c\u6d9f\u5e18\u655b\u8138\u94fe\u604b\u70bc\u7ec3\u631b\u8539\u5941\u6f4b\u6fc2\u5a08\u740f\u695d\u6b93\u81c1\u81a6\u88e2\u880a\u9ca2', 'liang': '\u7cae\u51c9\u6881\u7cb1\u826f\u4e24\u8f86\u91cf\u667e\u4eae\u8c05\u589a\u690b\u8e09\u9753\u9b49', 'liao': '\u64a9\u804a\u50da\u7597\u71ce\u5be5\u8fbd\u6f66\u4e86\u6482\u9563\u5ed6\u6599\u84fc\u5c25\u5639\u7360\u5bee\u7f2d\u948c\u9e69\u8022', 'lie': '\u5217\u88c2\u70c8\u52a3\u730e\u51bd\u57d2\u6d0c\u8d94\u8e90\u9b23', 'lin': '\u7433\u6797\u78f7\u9716\u4e34\u90bb\u9cde\u6dcb\u51db\u8d41\u541d\u853a\u5d99\u5eea\u9074\u6aa9\u8f9a\u77b5\u7cbc\u8e8f\u9e9f', 'liu': '\u6e9c\u7409\u69b4\u786b\u998f\u7559\u5218\u7624\u6d41\u67f3\u516d\u62a1\u507b\u848c\u6cd6\u6d4f\u905b\u9a9d\u7efa\u65d2\u7198\u950d\u954f\u9e68\u938f', 'long': '\u9f99\u804b\u5499\u7b3c\u7abf\u9686\u5784\u62e2\u9647\u5f04\u5785\u830f\u6cf7\u73d1\u680a\u80e7\u783b\u7643', 'lou': '\u697c\u5a04\u6402\u7bd3\u6f0f\u964b\u55bd\u5d5d\u9542\u7618\u8027\u877c\u9ac5', 'lu': '\u82a6\u5362\u9885\u5e90\u7089\u63b3\u5364\u864f\u9c81\u9e93\u788c\u9732\u8def\u8d42\u9e7f\u6f5e\u7984\u5f55\u9646\u622e\u5786\u6445\u64b8\u565c\u6cf8\u6e0c\u6f09\u7490\u680c\u6a79\u8f73\u8f82\u8f98\u6c07\u80ea\u9565\u9e2c\u9e6d\u7c0f\u823b\u9c88', 'lv': '\u9a74\u5415\u94dd\u4fa3\u65c5\u5c65\u5c61\u7f15\u8651\u6c2f\u5f8b\u7387\u6ee4\u7eff\u634b\u95fe\u6988\u8182\u7a06\u891b', 'luan': '\u5ce6\u5b6a\u6ee6\u5375\u4e71\u683e\u9e3e\u92ae', 'lue': '\u63a0\u7565\u950a', 'lun': '\u8f6e\u4f26\u4ed1\u6ca6\u7eb6\u8bba\u56f5', 'luo': '\u841d\u87ba\u7f57\u903b\u9523\u7ba9\u9aa1\u88f8\u843d\u6d1b\u9a86\u7edc\u502e\u8366\u645e\u7321\u6cfa\u6924\u8136\u9559\u7630\u96d2', 'ma': '\u5988\u9ebb\u739b\u7801\u8682\u9a6c\u9a82\u561b\u5417\u551b\u72b8\u5b37\u6769\u9ebd', 'mai': '\u57cb\u4e70\u9ea6\u5356\u8fc8\u8109\u52a2\u836c\u54aa\u973e', 'man': '\u7792\u9992\u86ee\u6ee1\u8513\u66fc\u6162\u6f2b\u8c29\u5881\u5e54\u7f26\u71b3\u9558\u989f\u87a8\u9cd7\u9794', 'mang': '\u8292\u832b\u76f2\u5fd9\u83bd\u9099\u6f2d\u6726\u786d\u87d2', 'meng': '\u6c13\u840c\u8499\u6aac\u76df\u9530\u731b\u68a6\u5b5f\u52d0\u750d\u77a2\u61f5\u791e\u867b\u8722\u8813\u824b\u8268\u9efe', 'miao': '\u732b\u82d7\u63cf\u7784\u85d0\u79d2\u6e3a\u5e99\u5999\u55b5\u9088\u7f08\u7f2a\u676a\u6dfc\u7707\u9e4b\u8731', 'mao': '\u8305\u951a\u6bdb\u77db\u94c6\u536f\u8302\u5192\u5e3d\u8c8c\u8d38\u4f94\u88a4\u52d6\u8306\u5cc1\u7441\u6634\u7266\u8004\u65c4\u61cb\u7780\u86d1\u8765\u87ca\u9ae6', 'me': '\u4e48', 'mei': '\u73ab\u679a\u6885\u9176\u9709\u7164\u6ca1\u7709\u5a92\u9541\u6bcf\u7f8e\u6627\u5bd0\u59b9\u5a9a\u5776\u8393\u5d4b\u7338\u6d7c\u6e44\u6963\u9545\u9e5b\u8882\u9b45', 'men': '\u95e8\u95f7\u4eec\u626a\u739f\u7116\u61d1\u9494', 'mi': '\u772f\u919a\u9761\u7cdc\u8ff7\u8c1c\u5f25\u7c73\u79d8\u89c5\u6ccc\u871c\u5bc6\u5e42\u8288\u5196\u8c27\u863c\u5627\u7315\u736f\u6c68\u5b93\u5f2d\u8112\u6549\u7cf8\u7e3b\u9e8b', 'mian': '\u68c9\u7720\u7ef5\u5195\u514d\u52c9\u5a29\u7f05\u9762\u6c94\u6e4e\u817c\u7704', 'mie': '\u8511\u706d\u54a9\u881b\u7bfe', 'min': '\u6c11\u62bf\u76bf\u654f\u60af\u95fd\u82e0\u5cb7\u95f5\u6cef\u73c9', 'ming': '\u660e\u879f\u9e23\u94ed\u540d\u547d\u51a5\u8317\u6e9f\u669d\u7791\u9169', 'miu': '\u8c2c', 'mo': '\u6478\u6479\u8611\u6a21\u819c\u78e8\u6469\u9b54\u62b9\u672b\u83ab\u58a8\u9ed8\u6cab\u6f20\u5bde\u964c\u8c1f\u8309\u84e6\u998d\u5aeb\u9546\u79e3\u763c\u8031\u87c6\u8c8a\u8c98', 'mou': '\u8c0b\u725f\u67d0\u53b6\u54de\u5a7a\u7738\u936a', 'mu': '\u62c7\u7261\u4ea9\u59c6\u6bcd\u5893\u66ae\u5e55\u52df\u6155\u6728\u76ee\u7766\u7267\u7a46\u4eeb\u82dc\u5452\u6c90\u6bea\u94bc', 'na': '\u62ff\u54ea\u5450\u94a0\u90a3\u5a1c\u7eb3\u5185\u637a\u80ad\u954e\u8872\u7bac', 'nai': '\u6c16\u4e43\u5976\u8010\u5948\u9f10\u827f\u8418\u67f0', 'nan': '\u5357\u7537\u96be\u56ca\u5583\u56e1\u6960\u8169\u877b\u8d67', 'nao': '\u6320\u8111\u607c\u95f9\u5b6c\u57b4\u7331\u7459\u7847\u94d9\u86f2', 'ne': '\u6dd6\u5462\u8bb7', 'nei': '\u9981', 'nen': '\u5ae9\u80fd\u6798\u6041', 'ni': '\u59ae\u9713\u502a\u6ce5\u5c3c\u62df\u4f60\u533f\u817b\u9006\u6eba\u4f32\u576d\u730a\u6029\u6ee0\u6635\u65ce\u7962\u615d\u7768\u94cc\u9cb5', 'nian': '\u852b\u62c8\u5e74\u78be\u64b5\u637b\u5ff5\u5eff\u8f87\u9ecf\u9c87\u9cb6', 'niang': '\u5a18\u917f', 'niao': '\u9e1f\u5c3f\u8311\u5b32\u8132\u8885', 'nie': '\u634f\u8042\u5b7d\u556e\u954a\u954d\u6d85\u4e5c\u9667\u8616\u55eb\u8080\u989e\u81ec\u8e51', 'nin': '\u60a8\u67e0', 'ning': '\u72de\u51dd\u5b81\u62e7\u6cde\u4f5e\u84e5\u549b\u752f\u804d', 'niu': '\u725b\u626d\u94ae\u7ebd\u72c3\u5ff8\u599e\u86b4', 'nong': '\u8113\u6d53\u519c\u4fac', 'nu': '\u5974\u52aa\u6012\u5476\u5e11\u5f29\u80ec\u5b65\u9a7d', 'nv': '\u5973\u6067\u9495\u8844', 'nuan': '\u6696', 'nuenue': '\u8650', 'nue': '\u759f\u8c11', 'nuo': '\u632a\u61e6\u7cef\u8bfa\u50a9\u6426\u558f\u9518', 'ou': '\u54e6\u6b27\u9e25\u6bb4\u85d5\u5455\u5076\u6ca4\u6004\u74ef\u8026', 'pa': '\u556a\u8db4\u722c\u5e15\u6015\u7436\u8469\u7b62', 'pai': '\u62cd\u6392\u724c\u5f98\u6e43\u6d3e\u4ff3\u848e', 'pan': '\u6500\u6f58\u76d8\u78d0\u76fc\u7554\u5224\u53db\u723f\u6cee\u88a2\u897b\u87e0\u8e52', 'pang': '\u4e53\u5e9e\u65c1\u802a\u80d6\u6ec2\u9004', 'pao': '\u629b\u5486\u5228\u70ae\u888d\u8dd1\u6ce1\u530f\u72cd\u5e96\u812c\u75b1', 'pei': '\u5478\u80da\u57f9\u88f4\u8d54\u966a\u914d\u4f69\u6c9b\u638a\u8f94\u5e14\u6de0\u65c6\u952b\u9185\u9708', 'pen': '\u55b7\u76c6\u6e53', 'peng': '\u7830\u62a8\u70f9\u6f8e\u5f6d\u84ec\u68da\u787c\u7bf7\u81a8\u670b\u9e4f\u6367\u78b0\u576f\u580b\u562d\u6026\u87db', 'pi': '\u7812\u9739\u6279\u62ab\u5288\u7435\u6bd7\u5564\u813e\u75b2\u76ae\u5339\u75de\u50fb\u5c41\u8b6c\u4e15\u9674\u90b3\u90eb\u572e\u9f19\u64d7\u567c\u5e80\u5ab2\u7eb0\u6787\u7513\u7765\u7f74\u94cd\u75e6\u7656\u758b\u868d\u8c94', 'pian': '\u7bc7\u504f\u7247\u9a97\u8c1d\u9a88\u728f\u80fc\u890a\u7fe9\u8e41', 'piao': '\u98d8\u6f02\u74e2\u7968\u527d\u560c\u5ad6\u7f25\u6b8d\u779f\u87b5', 'pie': '\u6487\u77a5\u4e3f\u82e4\u6c15', 'pin': '\u62fc\u9891\u8d2b\u54c1\u8058\u62da\u59d8\u5ad4\u6980\u725d\u98a6', 'ping': '\u4e52\u576a\u82f9\u840d\u5e73\u51ed\u74f6\u8bc4\u5c4f\u4fdc\u5a09\u67b0\u9c86', 'po': '\u5761\u6cfc\u9887\u5a46\u7834\u9b44\u8feb\u7c95\u53f5\u9131\u6ea5\u73c0\u948b\u94b7\u76a4\u7b38', 'pou': '\u5256\u88d2\u8e23', 'pu': '\u6251\u94fa\u4ec6\u8386\u8461\u83e9\u84b2\u57d4\u6734\u5703\u666e\u6d66\u8c31\u66dd\u7011\u530d\u5657\u6fee\u749e\u6c06\u9564\u9568\u8e7c', 'qi': '\u671f\u6b3a\u6816\u621a\u59bb\u4e03\u51c4\u6f06\u67d2\u6c8f\u5176\u68cb\u5947\u6b67\u7566\u5d0e\u8110\u9f50\u65d7\u7948\u7941\u9a91\u8d77\u5c82\u4e5e\u4f01\u542f\u5951\u780c\u5668\u6c14\u8fc4\u5f03\u6c7d\u6ce3\u8bab\u4e9f\u4e93\u573b\u8291\u840b\u847a\u5601\u5c7a\u5c90\u6c54\u6dc7\u9a90\u7eee\u742a\u7426\u675e\u6864\u69ed\u6b39\u797a\u61a9\u789b\u86f4\u871e\u7da6\u7dae\u8dbf\u8e4a\u9ccd\u9e92', 'qia': '\u6390\u6070\u6d3d\u845c', 'qian': '\u7275\u6266\u948e\u94c5\u5343\u8fc1\u7b7e\u4edf\u8c26\u4e7e\u9ed4\u94b1\u94b3\u524d\u6f5c\u9063\u6d45\u8c34\u5811\u5d4c\u6b20\u6b49\u4f65\u9621\u828a\u82a1\u8368\u63ae\u5c8d\u60ad\u614a\u9a9e\u6434\u8930\u7f31\u6920\u80b7\u6106\u94a4\u8654\u7b9d', 'qiang': '\u67aa\u545b\u8154\u7f8c\u5899\u8537\u5f3a\u62a2\u5af1\u6a2f\u6217\u709d\u9516\u9535\u956a\u8941\u8723\u7f9f\u8deb\u8dc4', 'qiao': '\u6a47\u9539\u6572\u6084\u6865\u77a7\u4e54\u4fa8\u5de7\u9798\u64ac\u7fd8\u5ced\u4fcf\u7a8d\u5281\u8bee\u8c2f\u835e\u6100\u6194\u7f32\u6a35\u6bf3\u7857\u8df7\u9792', 'qie': '\u5207\u8304\u4e14\u602f\u7a83\u90c4\u553c\u60ec\u59be\u6308\u9532\u7ba7', 'qin': '\u94a6\u4fb5\u4eb2\u79e6\u7434\u52e4\u82b9\u64d2\u79bd\u5bdd\u6c81\u82a9\u84c1\u8572\u63ff\u5423\u55ea\u5659\u6eb1\u6a8e\u8793\u887e', 'qing': '\u9752\u8f7b\u6c22\u503e\u537f\u6e05\u64ce\u6674\u6c30\u60c5\u9877\u8bf7\u5e86\u5029\u82d8\u570a\u6aa0\u78ec\u873b\u7f44\u7b90\u8b26\u9cad\u9ee5', 'qiong': '\u743c\u7a77\u909b\u8315\u7a79\u7b47\u928e', 'qiu': '\u79cb\u4e18\u90b1\u7403\u6c42\u56da\u914b\u6cc5\u4fc5\u6c3d\u5def\u827d\u72b0\u6e6b\u9011\u9052\u6978\u8d47\u9e20\u866c\u86af\u8764\u88d8\u7cd7\u9cc5\u9f3d', 'qu': '\u8d8b\u533a\u86c6\u66f2\u8eaf\u5c48\u9a71\u6e20\u53d6\u5a36\u9f8b\u8da3\u53bb\u8bce\u52ac\u8556\u8627\u5c96\u8862\u9612\u74a9\u89d1\u6c0d\u795b\u78f2\u766f\u86d0\u883c\u9eb4\u77bf\u9ee2', 'quan': '\u5708\u98a7\u6743\u919b\u6cc9\u5168\u75ca\u62f3\u72ac\u5238\u529d\u8be0\u8343\u737e\u609b\u7efb\u8f81\u754e\u94e8\u8737\u7b4c\u9b08', 'que': '\u7f3a\u7094\u7638\u5374\u9e4a\u69b7\u786e\u96c0\u9619\u60ab', 'qun': '\u88d9\u7fa4\u9021', 'ran': '\u7136\u71c3\u5189\u67d3\u82d2\u9aef', 'rang': '\u74e4\u58e4\u6518\u56b7\u8ba9\u79b3\u7a70', 'rao': '\u9976\u6270\u7ed5\u835b\u5a06\u6861', 'ruo': '\u60f9\u82e5\u5f31', 're': '\u70ed\u504c', 'ren': '\u58ec\u4ec1\u4eba\u5fcd\u97e7\u4efb\u8ba4\u5203\u598a\u7eab\u4ede\u834f\u845a\u996a\u8f6b\u7a14\u887d', 'reng': '\u6254\u4ecd', 'ri': '\u65e5', 'rong': '\u620e\u8338\u84c9\u8363\u878d\u7194\u6eb6\u5bb9\u7ed2\u5197\u5d58\u72e8\u7f1b\u6995\u877e', 'rou': '\u63c9\u67d4\u8089\u7cc5\u8e42\u97a3', 'ru': '\u8339\u8815\u5112\u5b7a\u5982\u8fb1\u4e73\u6c5d\u5165\u8925\u84d0\u85b7\u5685\u6d33\u6ebd\u6fe1\u94f7\u8966\u98a5', 'ruan': '\u8f6f\u962e\u670a', 'rui': '\u854a\u745e\u9510\u82ae\u8564\u777f\u868b', 'run': '\u95f0\u6da6', 'sa': '\u6492\u6d12\u8428\u5345\u4ee8\u6332\u98d2', 'sai': '\u816e\u9cc3\u585e\u8d5b\u567b', 'san': '\u4e09\u53c1\u4f1e\u6563\u5f61\u9993\u6c35\u6bf5\u7cc1\u9730', 'sang': '\u6851\u55d3\u4e27\u6421\u78c9\u98a1', 'sao': '\u6414\u9a9a\u626b\u5ac2\u57fd\u81ca\u7619\u9ccb', 'se': '\u745f\u8272\u6da9\u556c\u94e9\u94ef\u7a51', 'sen': '\u68ee', 'seng': '\u50e7', 'sha': '\u838e\u7802\u6740\u5239\u6c99\u7eb1\u50bb\u5565\u715e\u810e\u6b43\u75e7\u88df\u970e\u9ca8', 'shai': '\u7b5b\u6652\u917e', 'shan': '\u73ca\u82eb\u6749\u5c71\u5220\u717d\u886b\u95ea\u9655\u64c5\u8d61\u81b3\u5584\u6c55\u6247\u7f2e\u5261\u8baa\u912f\u57cf\u829f\u6f78\u59d7\u9a9f\u81bb\u9490\u759d\u87ee\u8222\u8dda\u9cdd', 'shang': '\u5892\u4f24\u5546\u8d4f\u664c\u4e0a\u5c1a\u88f3\u57a7\u7ef1\u6b87\u71b5\u89de', 'shao': '\u68a2\u634e\u7a0d\u70e7\u828d\u52fa\u97f6\u5c11\u54e8\u90b5\u7ecd\u52ad\u82d5\u6f72\u86f8\u7b24\u7b72\u8244', 'she': '\u5962\u8d4a\u86c7\u820c\u820d\u8d66\u6444\u5c04\u6151\u6d89\u793e\u8bbe\u538d\u4f58\u731e\u7572\u9e9d', 'shen': '\u7837\u7533\u547b\u4f38\u8eab\u6df1\u5a20\u7ec5\u795e\u6c88\u5ba1\u5a76\u751a\u80be\u614e\u6e17\u8bdc\u8c02\u5432\u54c2\u6e16\u6939\u77e7\u8703', 'sheng': '\u58f0\u751f\u7525\u7272\u5347\u7ef3\u7701\u76db\u5269\u80dc\u5723\u4e1e\u6e11\u5ab5\u771a\u7b19', 'shi': '\u5e08\u5931\u72ee\u65bd\u6e7f\u8bd7\u5c38\u8671\u5341\u77f3\u62fe\u65f6\u4ec0\u98df\u8680\u5b9e\u8bc6\u53f2\u77e2\u4f7f\u5c4e\u9a76\u59cb\u5f0f\u793a\u58eb\u4e16\u67ff\u4e8b\u62ed\u8a93\u901d\u52bf\u662f\u55dc\u566c\u9002\u4ed5\u4f8d\u91ca\u9970\u6c0f\u5e02\u6043\u5ba4\u89c6\u8bd5\u8c25\u57d8\u83b3\u84cd\u5f11\u5511\u9963\u8f7c\u8006\u8d33\u70bb\u793b\u94c8\u94ca\u87ab\u8210\u7b6e\u8c55\u9ca5\u9cba', 'shou': '\u6536\u624b\u9996\u5b88\u5bff\u6388\u552e\u53d7\u7626\u517d\u624c\u72e9\u7ef6\u824f', 'shu': '\u852c\u67a2\u68b3\u6b8a\u6292\u8f93\u53d4\u8212\u6dd1\u758f\u4e66\u8d4e\u5b70\u719f\u85af\u6691\u66d9\u7f72\u8700\u9ecd\u9f20\u5c5e\u672f\u8ff0\u6811\u675f\u620d\u7ad6\u5885\u5eb6\u6570\u6f31\u6055\u500f\u587e\u83fd\u5fc4\u6cad\u6d91\u6f8d\u59dd\u7ebe\u6bf9\u8167\u6bb3\u956f\u79eb\u9e6c', 'shua': '\u5237\u800d\u5530\u6dae', 'shuai': '\u6454\u8870\u7529\u5e05\u87c0', 'shuan': '\u6813\u62f4\u95e9', 'shuang': '\u971c\u53cc\u723d\u5b40', 'shui': '\u8c01\u6c34\u7761\u7a0e', 'shun': '\u542e\u77ac\u987a\u821c\u6042', 'shuo': '\u8bf4\u7855\u6714\u70c1\u84b4\u6420\u55cd\u6fef\u5981\u69ca\u94c4', 'si': '\u65af\u6495\u5636\u601d\u79c1\u53f8\u4e1d\u6b7b\u8086\u5bfa\u55e3\u56db\u4f3a\u4f3c\u9972\u5df3\u53ae\u4fdf\u5155\u83e5\u549d\u6c5c\u6cd7\u6f8c\u59d2\u9a77\u7f0c\u7940\u7960\u9536\u9e36\u801c\u86f3\u7b25', 'song': '\u677e\u8038\u6002\u9882\u9001\u5b8b\u8bbc\u8bf5\u51c7\u83d8\u5d27\u5d69\u5fea\u609a\u6dde\u7ae6', 'sou': '\u641c\u8258\u64de\u55fd\u53df\u55d6\u55fe\u998a\u6eb2\u98d5\u778d\u953c\u878b', 'su': '\u82cf\u9165\u4fd7\u7d20\u901f\u7c9f\u50f3\u5851\u6eaf\u5bbf\u8bc9\u8083\u5919\u8c21\u850c\u55c9\u612b\u7c0c\u89eb\u7a23', 'suan': '\u9178\u849c\u7b97', 'sui': '\u867d\u968b\u968f\u7ee5\u9ad3\u788e\u5c81\u7a57\u9042\u96a7\u795f\u84d1\u51ab\u8c07\u6fc9\u9083\u71e7\u772d\u7762', 'sun': '\u5b59\u635f\u7b0b\u836a\u72f2\u98e7\u69ab\u8de3\u96bc', 'suo': '\u68ad\u5506\u7f29\u7410\u7d22\u9501\u6240\u5522\u55e6\u5a11\u686b\u7743\u7fa7', 'ta': '\u584c\u4ed6\u5b83\u5979\u5854\u736d\u631e\u8e4b\u8e0f\u95fc\u6ebb\u9062\u69bb\u6c93', 'tai': '\u80ce\u82d4\u62ac\u53f0\u6cf0\u915e\u592a\u6001\u6c70\u90b0\u85b9\u80bd\u70b1\u949b\u8dc6\u9c90', 'tan': '\u574d\u644a\u8d2a\u762b\u6ee9\u575b\u6a80\u75f0\u6f6d\u8c2d\u8c08\u5766\u6bef\u8892\u78b3\u63a2\u53f9\u70ad\u90ef\u8548\u6619\u94bd\u952c\u8983', 'tang': '\u6c64\u5858\u642a\u5802\u68e0\u819b\u5510\u7cd6\u50a5\u9967\u6e8f\u746d\u94f4\u9557\u8025\u8797\u87b3\u7fb0\u91a3', 'thang': '\u5018\u8eba\u6dcc', 'theng': '\u8d9f\u70eb', 'tao': '\u638f\u6d9b\u6ed4\u7ee6\u8404\u6843\u9003\u6dd8\u9676\u8ba8\u5957\u6311\u9f17\u5555\u97ec\u9955', 'te': '\u7279', 'teng': '\u85e4\u817e\u75bc\u8a8a\u6ed5', 'ti': '\u68af\u5254\u8e22\u9511\u63d0\u9898\u8e44\u557c\u4f53\u66ff\u568f\u60d5\u6d95\u5243\u5c49\u8351\u608c\u9016\u7ee8\u7f07\u9e48\u88fc\u918d', 'tian': '\u5929\u6dfb\u586b\u7530\u751c\u606c\u8214\u8146\u63ad\u5fdd\u9617\u6b84\u754b\u94bf\u86ba', 'tiao': '\u6761\u8fe2\u773a\u8df3\u4f7b\u7967\u94eb\u7a95\u9f86\u9ca6', 'tie': '\u8d34\u94c1\u5e16\u841c\u992e', 'ting': '\u5385\u542c\u70c3\u6c40\u5ef7\u505c\u4ead\u5ead\u633a\u8247\u839b\u8476\u5a77\u6883\u8713\u9706', 'tong': '\u901a\u6850\u916e\u77b3\u540c\u94dc\u5f64\u7ae5\u6876\u6345\u7b52\u7edf\u75db\u4f5f\u50ee\u4edd\u833c\u55f5\u6078\u6f7c\u783c', 'tou': '\u5077\u6295\u5934\u900f\u4ea0', 'tu': '\u51f8\u79c3\u7a81\u56fe\u5f92\u9014\u6d82\u5c60\u571f\u5410\u5154\u580d\u837c\u83df\u948d\u9174', 'tuan': '\u6e4d\u56e2\u7583', 'tui': '\u63a8\u9893\u817f\u8715\u892a\u9000\u5fd2\u717a', 'tun': '\u541e\u5c6f\u81c0\u9968\u66be\u8c5a\u7a80', 'tuo': '\u62d6\u6258\u8131\u9e35\u9640\u9a6e\u9a7c\u692d\u59a5\u62d3\u553e\u4e47\u4f57\u5768\u5eb9\u6cb1\u67dd\u7823\u7ba8\u8204\u8dce\u9f0d', 'wa': '\u6316\u54c7\u86d9\u6d3c\u5a03\u74e6\u889c\u4f64\u5a32\u817d', 'wai': '\u6b6a\u5916', 'wan': '\u8c4c\u5f2f\u6e7e\u73a9\u987d\u4e38\u70f7\u5b8c\u7897\u633d\u665a\u7696\u60cb\u5b9b\u5a49\u4e07\u8155\u525c\u8284\u82cb\u83c0\u7ea8\u7efe\u742c\u8118\u7579\u873f\u7ba2', 'wang': '\u6c6a\u738b\u4ea1\u6789\u7f51\u5f80\u65fa\u671b\u5fd8\u5984\u7f54\u5c22\u60d8\u8f8b\u9b4d', 'wei': '\u5a01\u5dcd\u5fae\u5371\u97e6\u8fdd\u6845\u56f4\u552f\u60df\u4e3a\u6f4d\u7ef4\u82c7\u840e\u59d4\u4f1f\u4f2a\u5c3e\u7eac\u672a\u851a\u5473\u754f\u80c3\u5582\u9b4f\u4f4d\u6e2d\u8c13\u5c09\u6170\u536b\u502d\u504e\u8bff\u9688\u8473\u8587\u5e0f\u5e37\u5d34\u5d6c\u7325\u732c\u95f1\u6ca9\u6d27\u6da0\u9036\u5a13\u73ae\u97ea\u8ece\u709c\u7168\u71a8\u75ff\u8249\u9c94', 'wen': '\u761f\u6e29\u868a\u6587\u95fb\u7eb9\u543b\u7a33\u7d0a\u95ee\u520e\u6120\u960c\u6c76\u74ba\u97eb\u6b81\u96ef', 'weng': '\u55e1\u7fc1\u74ee\u84ca\u8579', 'wo': '\u631d\u8717\u6da1\u7a9d\u6211\u65a1\u5367\u63e1\u6c83\u83b4\u5e44\u6e25\u674c\u809f\u9f8c', 'wu': '\u5deb\u545c\u94a8\u4e4c\u6c61\u8bec\u5c4b\u65e0\u829c\u68a7\u543e\u5434\u6bcb\u6b66\u4e94\u6342\u5348\u821e\u4f0d\u4fae\u575e\u620a\u96fe\u6664\u7269\u52ff\u52a1\u609f\u8bef\u5140\u4ef5\u9622\u90ac\u572c\u82b4\u5e91\u6003\u5fe4\u6d6f\u5be4\u8fd5\u59a9\u9a9b\u727e\u7110\u9e49\u9e5c\u8708\u92c8\u9f2f', 'xi': '\u6614\u7199\u6790\u897f\u7852\u77fd\u6670\u563b\u5438\u9521\u727a\u7a00\u606f\u5e0c\u6089\u819d\u5915\u60dc\u7184\u70ef\u6eaa\u6c50\u7280\u6a84\u88ad\u5e2d\u4e60\u5ab3\u559c\u94e3\u6d17\u7cfb\u9699\u620f\u7ec6\u50d6\u516e\u96b0\u90d7\u831c\u8478\u84f0\u595a\u550f\u5f99\u9969\u960b\u6d60\u6dc5\u5c63\u5b09\u73ba\u6a28\u66e6\u89cb\u6b37\u71b9\u798a\u79a7\u94b8\u7699\u7a78\u8725\u87cb\u823e\u7fb2\u7c9e\u7fd5\u91af\u9f37', 'xia': '\u778e\u867e\u5323\u971e\u8f96\u6687\u5ce1\u4fa0\u72ed\u4e0b\u53a6\u590f\u5413\u6380\u846d\u55c4\u72ce\u9050\u7455\u7856\u7615\u7f45\u9ee0', 'xian': '\u9528\u5148\u4ed9\u9c9c\u7ea4\u54b8\u8d24\u8854\u8237\u95f2\u6d8e\u5f26\u5acc\u663e\u9669\u73b0\u732e\u53bf\u817a\u9985\u7fa1\u5baa\u9677\u9650\u7ebf\u51bc\u85d3\u5c98\u7303\u66b9\u5a34\u6c19\u7946\u9e47\u75eb\u86ac\u7b45\u7c7c\u9170\u8df9', 'xiang': '\u76f8\u53a2\u9576\u9999\u7bb1\u8944\u6e58\u4e61\u7fd4\u7965\u8be6\u60f3\u54cd\u4eab\u9879\u5df7\u6a61\u50cf\u5411\u8c61\u8297\u8459\u9977\u5ea0\u9aa7\u7f03\u87d3\u9c9e\u98e8', 'xiao': '\u8427\u785d\u9704\u524a\u54ee\u56a3\u9500\u6d88\u5bb5\u6dc6\u6653\u5c0f\u5b5d\u6821\u8096\u5578\u7b11\u6548\u54d3\u54bb\u5d24\u6f47\u900d\u9a81\u7ee1\u67ad\u67b5\u7b71\u7bab\u9b48', 'xie': '\u6954\u4e9b\u6b47\u874e\u978b\u534f\u631f\u643a\u90aa\u659c\u80c1\u8c10\u5199\u68b0\u5378\u87f9\u61c8\u6cc4\u6cfb\u8c22\u5c51\u5055\u4eb5\u52f0\u71ee\u85a4\u64b7\u5ee8\u7023\u9082\u7ec1\u7f2c\u69ad\u698d\u6b59\u8e9e', 'xin': '\u85aa\u82af\u950c\u6b23\u8f9b\u65b0\u5ffb\u5fc3\u4fe1\u8845\u56df\u99a8\u8398\u6b46\u94fd\u946b', 'xing': '\u661f\u8165\u7329\u60fa\u5174\u5211\u578b\u5f62\u90a2\u884c\u9192\u5e78\u674f\u6027\u59d3\u9649\u8347\u8365\u64e4\u60bb\u784e', 'xiong': '\u5144\u51f6\u80f8\u5308\u6c79\u96c4\u718a\u828e', 'xiu': '\u4f11\u4fee\u7f9e\u673d\u55c5\u9508\u79c0\u8896\u7ee3\u83a0\u5cab\u9990\u5ea5\u9e3a\u8c85\u9af9', 'xu': '\u589f\u620c\u9700\u865a\u5618\u987b\u5f90\u8bb8\u84c4\u9157\u53d9\u65ed\u5e8f\u755c\u6064\u7d6e\u5a7f\u7eea\u7eed\u8bb4\u8be9\u5729\u84ff\u6035\u6d2b\u6e86\u987c\u6829\u7166\u7809\u76f1\u80e5\u7cc8\u9191', 'xuan': '\u8f69\u55a7\u5ba3\u60ac\u65cb\u7384\u9009\u7663\u7729\u7eda\u5107\u8c16\u8431\u63ce\u9994\u6ceb\u6d35\u6e32\u6f29\u7487\u6966\u6684\u70ab\u714a\u78b9\u94c9\u955f\u75c3', 'xue': '\u9774\u859b\u5b66\u7a74\u96ea\u8840\u5671\u6cf6\u9cd5', 'xun': '\u52cb\u718f\u5faa\u65ec\u8be2\u5bfb\u9a6f\u5de1\u6b89\u6c5b\u8bad\u8baf\u900a\u8fc5\u5dfd\u57d9\u8340\u85b0\u5ccb\u5f87\u6d54\u66db\u7aa8\u91ba\u9c9f', 'ya': '\u538b\u62bc\u9e26\u9e2d\u5440\u4e2b\u82bd\u7259\u869c\u5d16\u8859\u6daf\u96c5\u54d1\u4e9a\u8bb6\u4f22\u63e0\u5416\u5c88\u8fd3\u5a05\u740a\u6860\u6c29\u7811\u775a\u75d6', 'yan': '\u7109\u54bd\u9609\u70df\u6df9\u76d0\u4e25\u7814\u8712\u5ca9\u5ef6\u8a00\u989c\u960e\u708e\u6cbf\u5944\u63a9\u773c\u884d\u6f14\u8273\u5830\u71d5\u538c\u781a\u96c1\u5501\u5f66\u7130\u5bb4\u8c1a\u9a8c\u53a3\u9765\u8d5d\u4fe8\u5043\u5156\u8ba0\u8c33\u90fe\u9122\u82ab\u83f8\u5d26\u6079\u95eb\u960f\u6d07\u6e6e\u6edf\u598d\u5ae3\u7430\u664f\u80ed\u814c\u7131\u7f68\u7b75\u917d\u9b47\u990d\u9f39', 'yang': '\u6b83\u592e\u9e2f\u79e7\u6768\u626c\u4f6f\u75a1\u7f8a\u6d0b\u9633\u6c27\u4ef0\u75d2\u517b\u6837\u6f3e\u5f89\u600f\u6cf1\u7080\u70ca\u6059\u86d8\u9785', 'yao': '\u9080\u8170\u5996\u7476\u6447\u5c27\u9065\u7a91\u8c23\u59da\u54ac\u8200\u836f\u8981\u8000\u592d\u723b\u5406\u5d3e\u5fad\u7039\u5e7a\u73e7\u6773\u66dc\u80b4\u9e5e\u7a88\u7e47\u9cd0', 'ye': '\u6930\u564e\u8036\u7237\u91ce\u51b6\u4e5f\u9875\u6396\u4e1a\u53f6\u66f3\u814b\u591c\u6db2\u8c12\u90ba\u63f6\u9980\u6654\u70e8\u94d8', 'yi': '\u4e00\u58f9\u533b\u63d6\u94f1\u4f9d\u4f0a\u8863\u9890\u5937\u9057\u79fb\u4eea\u80f0\u7591\u6c82\u5b9c\u59e8\u5f5d\u6905\u8681\u501a\u5df2\u4e59\u77e3\u4ee5\u827a\u6291\u6613\u9091\u5c79\u4ebf\u5f79\u81c6\u9038\u8084\u75ab\u4ea6\u88d4\u610f\u6bc5\u5fc6\u4e49\u76ca\u6ea2\u8be3\u8bae\u8c0a\u8bd1\u5f02\u7ffc\u7fcc\u7ece\u5208\u5293\u4f7e\u8bd2\u572a\u572f\u57f8\u61ff\u82e1\u858f\u5f08\u5955\u6339\u5f0b\u5453\u54a6\u54bf\u566b\u5cc4\u5db7\u7317\u9974\u603f\u6021\u6092\u6f2a\u8fe4\u9a7f\u7f22\u6baa\u8d3b\u65d6\u71a0\u9487\u9552\u9571\u75cd\u7617\u7654\u7fca\u8864\u8734\u8223\u7fbf\u7ff3\u914f\u9edf', 'yin': '\u8335\u836b\u56e0\u6bb7\u97f3\u9634\u59fb\u541f\u94f6\u6deb\u5bc5\u996e\u5c39\u5f15\u9690\u5370\u80e4\u911e\u5819\u831a\u5591\u72fa\u5924\u6c24\u94df\u763e\u8693\u972a\u9f88', 'ying': '\u82f1\u6a31\u5a74\u9e70\u5e94\u7f28\u83b9\u8424\u8425\u8367\u8747\u8fce\u8d62\u76c8\u5f71\u9896\u786c\u6620\u5b34\u90e2\u8314\u83ba\u8426\u6484\u5624\u81ba\u6ee2\u6f46\u701b\u745b\u748e\u6979\u9e66\u763f\u988d\u7f42', 'yo': '\u54df\u5537', 'yong': '\u62e5\u4f63\u81c3\u75c8\u5eb8\u96cd\u8e0a\u86f9\u548f\u6cf3\u6d8c\u6c38\u607f\u52c7\u7528\u4fd1\u58c5\u5889\u6175\u9095\u955b\u752c\u9cd9\u9954', 'you': '\u5e7d\u4f18\u60a0\u5fe7\u5c24\u7531\u90ae\u94c0\u72b9\u6cb9\u6e38\u9149\u6709\u53cb\u53f3\u4f51\u91c9\u8bf1\u53c8\u5e7c\u5363\u6538\u4f91\u83b8\u5466\u56ff\u5ba5\u67da\u7337\u7256\u94d5\u75a3\u8763\u9c7f\u9edd\u9f2c', 'yu': '\u8fc2\u6de4\u4e8e\u76c2\u6986\u865e\u611a\u8206\u4f59\u4fde\u903e\u9c7c\u6109\u6e1d\u6e14\u9685\u4e88\u5a31\u96e8\u4e0e\u5c7f\u79b9\u5b87\u8bed\u7fbd\u7389\u57df\u828b\u90c1\u5401\u9047\u55bb\u5cea\u5fa1\u6108\u6b32\u72f1\u80b2\u8a89\u6d74\u5bd3\u88d5\u9884\u8c6b\u9a6d\u79ba\u6bd3\u4f1b\u4fe3\u8c00\u8c15\u8438\u84e3\u63c4\u5581\u5704\u5709\u5d5b\u72f3\u996b\u5ebe\u9608\u59aa\u59a4\u7ea1\u745c\u6631\u89ce\u8174\u6b24\u65bc\u715c\u71e0\u807f\u94b0\u9e46\u7610\u7600\u7ab3\u8753\u7afd\u8201\u96e9\u9f89', 'yuan': '\u9e33\u6e0a\u51a4\u5143\u57a3\u8881\u539f\u63f4\u8f95\u56ed\u5458\u5706\u733f\u6e90\u7f18\u8fdc\u82d1\u613f\u6028\u9662\u586c\u6c85\u5a9b\u7457\u6a7c\u7230\u7722\u9e22\u8788\u9f0b', 'yue': '\u66f0\u7ea6\u8d8a\u8dc3\u94a5\u5cb3\u7ca4\u6708\u60a6\u9605\u9fa0\u6a3e\u5216\u94ba', 'yun': '\u8018\u4e91\u90e7\u5300\u9668\u5141\u8fd0\u8574\u915d\u6655\u97f5\u5b55\u90d3\u82b8\u72c1\u607d\u7ead\u6b92\u6600\u6c32', 'za': '\u531d\u7838\u6742\u62f6\u5482', 'zai': '\u683d\u54c9\u707e\u5bb0\u8f7d\u518d\u5728\u54b1\u5d3d\u753e', 'zan': '\u6512\u6682\u8d5e\u74d2\u661d\u7c2a\u7ccc\u8db1\u933e', 'zang': '\u8d43\u810f\u846c\u5958\u6215\u81e7', 'zao': '\u906d\u7cdf\u51ff\u85fb\u67a3\u65e9\u6fa1\u86a4\u8e81\u566a\u9020\u7682\u7076\u71e5\u5523\u7f2b', 'ze': '\u8d23\u62e9\u5219\u6cfd\u4ec4\u8d5c\u5567\u8fee\u6603\u7b2e\u7ba6\u8234', 'zei': '\u8d3c', 'zen': '\u600e\u8c2e', 'zeng': '\u589e\u618e\u66fe\u8d60\u7f2f\u7511\u7f7e\u9503', 'zha': '\u624e\u55b3\u6e23\u672d\u8f67\u94e1\u95f8\u7728\u6805\u69a8\u548b\u4e4d\u70b8\u8bc8\u63f8\u5412\u54a4\u54f3\u600d\u781f\u75c4\u86b1\u9f44', 'zhai': '\u6458\u658b\u5b85\u7a84\u503a\u5be8\u7826', 'zhan': '\u77bb\u6be1\u8a79\u7c98\u6cbe\u76cf\u65a9\u8f97\u5d2d\u5c55\u8638\u6808\u5360\u6218\u7ad9\u6e5b\u7efd\u8c35\u640c\u65c3', 'zhang': '\u6a1f\u7ae0\u5f70\u6f33\u5f20\u638c\u6da8\u6756\u4e08\u5e10\u8d26\u4ed7\u80c0\u7634\u969c\u4ec9\u9123\u5e5b\u5d82\u7350\u5adc\u748b\u87d1', 'zhao': '\u62db\u662d\u627e\u6cbc\u8d75\u7167\u7f69\u5146\u8087\u53ec\u722a\u8bcf\u68f9\u948a\u7b0a', 'zhe': '\u906e\u6298\u54f2\u86f0\u8f99\u8005\u9517\u8517\u8fd9\u6d59\u8c2a\u966c\u67d8\u8f84\u78d4\u9e67\u891a\u8707\u8d6d', 'zhen': '\u73cd\u659f\u771f\u7504\u7827\u81fb\u8d1e\u9488\u4fa6\u6795\u75b9\u8bca\u9707\u632f\u9547\u9635\u7f1c\u6862\u699b\u8f78\u8d48\u80d7\u6715\u796f\u755b\u9e29', 'zheng': '\u84b8\u6323\u7741\u5f81\u72f0\u4e89\u6014\u6574\u62ef\u6b63\u653f\u5e27\u75c7\u90d1\u8bc1\u8be4\u5ce5\u94b2\u94ee\u7b5d', 'zhi': '\u829d\u679d\u652f\u5431\u8718\u77e5\u80a2\u8102\u6c41\u4e4b\u7ec7\u804c\u76f4\u690d\u6b96\u6267\u503c\u4f84\u5740\u6307\u6b62\u8dbe\u53ea\u65e8\u7eb8\u5fd7\u631a\u63b7\u81f3\u81f4\u7f6e\u5e1c\u5cd9\u5236\u667a\u79e9\u7a1a\u8d28\u7099\u75d4\u6ede\u6cbb\u7a92\u536e\u965f\u90c5\u57f4\u82b7\u646d\u5e19\u5fee\u5f58\u54ab\u9a98\u6809\u67b3\u6800\u684e\u8f75\u8f7e\u6534\u8d3d\u81a3\u7949\u7957\u9ef9\u96c9\u9e37\u75e3\u86ed\u7d77\u916f\u8dd6\u8e2c\u8e2f\u8c78\u89ef', 'zhong': '\u4e2d\u76c5\u5fe0\u949f\u8877\u7ec8\u79cd\u80bf\u91cd\u4ef2\u4f17\u51a2\u953a\u87bd\u8202\u822f\u8e35', 'zhou': '\u821f\u5468\u5dde\u6d32\u8bcc\u7ca5\u8f74\u8098\u5e1a\u5492\u76b1\u5b99\u663c\u9aa4\u5544\u7740\u501c\u8bf9\u836e\u9b3b\u7ea3\u80c4\u78a1\u7c40\u8233\u914e\u9cb7', 'zhu': '\u73e0\u682a\u86db\u6731\u732a\u8bf8\u8bdb\u9010\u7af9\u70db\u716e\u62c4\u77a9\u5631\u4e3b\u8457\u67f1\u52a9\u86c0\u8d2e\u94f8\u7b51\u4f4f\u6ce8\u795d\u9a7b\u4f2b\u4f8f\u90be\u82ce\u8331\u6d19\u6e1a\u6f74\u9a7a\u677c\u69e0\u6a65\u70b7\u94e2\u75b0\u7603\u86b0\u7afa\u7bb8\u7fe5\u8e85\u9e88', 'zhua': '\u6293', 'zhuai': '\u62fd', 'zhuan': '\u4e13\u7816\u8f6c\u64b0\u8d5a\u7bc6\u629f\u556d\u989b', 'zhuang': '\u6869\u5e84\u88c5\u5986\u649e\u58ee\u72b6\u4e2c', 'zhui': '\u690e\u9525\u8ffd\u8d58\u5760\u7f00\u8411\u9a93\u7f12', 'zhun': '\u8c06\u51c6', 'zhuo': '\u6349\u62d9\u5353\u684c\u7422\u8301\u914c\u707c\u6d4a\u502c\u8bfc\u5ef4\u855e\u64e2\u555c\u6d5e\u6dbf\u6753\u712f\u799a\u65ab', 'zi': '\u5179\u54a8\u8d44\u59ff\u6ecb\u6dc4\u5b5c\u7d2b\u4ed4\u7c7d\u6ed3\u5b50\u81ea\u6e0d\u5b57\u8c18\u5d6b\u59ca\u5b73\u7f01\u6893\u8f8e\u8d40\u6063\u7726\u9531\u79ed\u8014\u7b2b\u7ca2\u89dc\u8a3e\u9cbb\u9aed', 'zong': '\u9b03\u68d5\u8e2a\u5b97\u7efc\u603b\u7eb5\u8159\u7cbd', 'zou': '\u90b9\u8d70\u594f\u63cd\u9139\u9cb0', 'zu': '\u79df\u8db3\u5352\u65cf\u7956\u8bc5\u963b\u7ec4\u4fce\u83f9\u5550\u5f82\u9a75\u8e74', 'zuan': '\u94bb\u7e82\u6525\u7f35', 'zui': '\u5634\u9189\u6700\u7f6a', 'zun': '\u5c0a\u9075\u6499\u6a3d\u9cdf', 'zuo': '\u6628\u5de6\u4f50\u67de\u505a\u4f5c\u5750\u5ea7\u961d\u963c\u80d9\u795a\u9162', 'cou': '\u85ae\u6971\u8f8f\u8160', 'nang': '\u652e\u54dd\u56d4\u9995\u66e9', 'o': '\u5594', 'dia': '\u55f2', 'chuai': '\u562c\u81aa\u8e39', 'cen': '\u5c91\u6d94', 'diu': '\u94e5', 'nou': '\u8028', 'fou': '\u7f36', 'bia': '\u9adf' }; 二、把此文件导入js方法中,重新定义一个js方便管理; vue-py.

<Linux>解决Ubuntu中vi编辑方向键不能移动光标的问题

因为vi在Ubuntu里面不好用,所以把它设置一下兼容模式, 打开终端 输入sudo vi/etc/vim/vimrc.tiny 之后将其中的set compatible改成set nocompatible 并在下一行加上set backspace=2 就可以了,像这样 如果不能将compatible”改成“nocompatible并报错需要上一个正则表达式可能是Ubuntu预装的是vim-tiny,而我们需要使用vim-full, 解决方法:下载vim-tiny sudo apt-get remove vim-common 安装vim-full sudo apt-get install vim

利用强化学习进行股票操作实战(四)

本次实战代码仍是在之前基础上进行了一些修改。之前只在一支股票上进行训练,这次我将模型放在多支股票上训练,并在多支股票上进行了测试。对于多支股票的训练策略,没有参考过别人的训练方案(做这个的比较少)。我按自己的理解去训练,每一轮训练,都将每支股票从头到尾走一次。核心代码如下: 结果: 股票1: 不加均线的回测结果: 加均线的回测结果: 股票2: 不加均线的回测结果: 加均线的回测结果: 股票3: 不加均线的回测结果: 加均线的回测结果: 从上图可以发现,加了均线系统限制股票买卖效果不一定好,但是可以从一定程度上规避风险。在下跌趋势比较明显的股票中,均线系统能够很好的保护账户,减少损失。(如股票3)我这个均线策略设计的比较粗糙,如果细化一点,效果应该会好一些。 我本想依靠强化学习实现自动加减仓的功能,但发现这个似乎不太好做。 我最开始尝试了DDPG模型(ActorCritic中的一种),想利用Critic进行评价当前动作能够得到的收益(或是当前动作有多优秀),但是我发现critic很难训练,可能跟我使用的姿势不太对。我是将当前状态和当前动作当做特征输入critic网络中进行评价,这样输入可能很难让神经网络从中学到,应该输入当前状态,评价不同状态的得分。(现在才想到可以这么做,也有可能是神经网络需要精心设计过才好) 然后我又尝试了强制每次交易不满仓,只买入1/5仓位或只买入1/3仓位,每次卖出也同样。但我发现多数情况下这种分批次加减仓操作的效果都不如每次满仓操作效果好。我尝试了两种训练方式:1、在训练中满仓操作单,回测时分批买入;2、在训练中分批买入或卖出,回测同样。这两种训练方式效果都表现不好。 于是我就放弃了加减仓的设计。其实加减仓也可以结合大盘和个股的走势情况进行一个判断,可以通过建模得到当前风险状况来评估仓位设置。(这个后期再考虑了) 最后我再说下我对强化学习用在股票交易上的看法,我个人觉得强化学习用在股票交易上就是大材小用。强化学习适合当前动作对于之后影响没法立刻体现的任务,而在股票交易上,你今天买入或卖出第二天就知道当前操作是否正确。当然可以看一个长期的收益,但如果看一个长期的收益,似乎就不需要强化学习了,可以利用传统的机器学习算法或因子模型等。可能确实可以用强化学习,但我个人还是觉得有些大材小用,有监督学习就可以较好的解决股票交易这个问题。 代码github: https://github.com/wbbhcb/stock_market 对量化、数据挖掘、深度学习感兴趣的可以关注公众号,本人不定期分享有关这些方面的研究。 个人知乎: https://www.zhihu.com/people/e-zhe-shi-wo/activities

word 如何快速比较两个文档的区别

相信大家无论在工作还是学习上,都有和Word打过交道,经常会用来写文章和论文, 如果这时候老板发了两份Word文档给你,一份是原稿,一份是修订稿,让你找出这两份文档之间的差异,该怎么办呢? 如上图所示,里面有两份文档,一份是原稿,一份是修改版,我们需要核对这两份文档之间的内容差异,可能有的小伙伴会去对比两份文档中的每一个字,这样效率就太慢了, 今天就教你们如何用10秒就找出两份文档之间的差异。 操作步骤: 1、打开需要核对的任意一篇文章,点击菜单栏上的【审阅】,在下面找到【比较】,然后点开选择第一个比较两个版本的内容。 2、弹出比较文档的窗口后,原文档选择【原稿】,修订的文档选择【修改版】的文档,选择好之后就可以点击【确定】。 3、点击确定之后就会出现比较结果,最左边是【修订的内容】,中间是比较的文档也就是【修改版】的内容,右边是原文档和修改版的对比文档。 4、虽然对比结果出来了,但是我们只看最左边的修订内容,还是很难分辨到底修改了哪些内容。这是我们可以点击菜单栏上的【修订】,将里面的【简单标记】改为【所有标记】。 5、这样操作之后,修改过的内容就会用红色标注好,一眼看上去就知道哪些地方被修改过,一目了然。 以上就是快速核对两份文档修改前后的方法步骤,10秒就可以快速查看两份文档的不同之处,你学会了吗?如果你还有更好的方法技巧,可以分享出来大家一起学习学习。

【git 使用】【git常见错误处理一】状态不一致:Your branch is ahead of 'origin/master' by 2 commits

【git 使用】【git常见错误处理一】状态不一致:Your branch is ahead of 'origin/master' by 2 commits 现象:当查看状态时,或者pull拉取server上的版本时,提示本地commit没有push: 【命令】: 查看本地状态信息 git status 【报错】: On branch master Your branch is ahead of 'origin/master' by 2 commits. (use "git push" to publish your local commits) 【分析】: 如果保证git server上确实已经提交了代码,仅仅只是本地git状态不一致,则可以用以下命令: git fetch - -all git pull git reset - -hard origin/master 然后查看状态,正确了。

向量二范数的求导问题

现有目标函数: f ( x ) = 1 2 ∥ A x − b ∥ 2 2 f(x)=\frac{1}{2} \parallel Ax-b \parallel_2^2 f(x)=21​∥Ax−b∥22​ 其中 A ∈ R N × m A\in \mathbb{R}^{N \times m} A∈RN×m, x ∈ R m x \in \mathbb{R}^m x∈Rm, b ∈ R n b\in \mathbb{R}^n b∈Rn 则求 f ′ ( x ) f^{'}(x) f′(x)的推导如下: f ( x ) = 1 2 ∥ A x − b ∥ 2 2 = 1 2 ( A x − b ) T ( A x − b ) = 1 2 ( x T A T − b T ) ( A x − b ) = 1 2 ( x T A T A x − x T A T b − b T A x + b T b ) \begin {aligned} f(x)&=\frac{1}{2} \parallel Ax-b \parallel_2^2 \\ &=\frac{1}{2}(Ax-b)^T(Ax-b)\\ &=\frac{1}{2}(x^TA^T-b^T)(Ax-b)\\ &=\frac{1}{2}(x^TA^TAx-x^TA^Tb-b^TAx+b^Tb) \end {aligned} f(x)​=21​∥Ax−b∥22​=21​(Ax−b)T(Ax−b)=21​(xTAT−bT)(Ax−b)=21​(xTATAx−xTATb−bTAx+bTb)​

重定向

重定向 重定向的意思: 重定向的意思就是说浏览器里面指定访问的一个url地址,去网站服务器里面访问后, 网站的服务器又指向浏览器中另外的一个地址,然后浏览器再去访问网站服务器的那个另外的地址。 这样形成的叫做网页重定向。 重定向的解释图 具体的代码示例: HttpResponseRedirect#添加书籍的函数 def add_book(request): b = Bookinfor() b.book_name = '三国演义' b.save() return HttpResponseRedirect('/index') 这样就能够保证在点击添加的时候,超链接执行完这个函数后直接访问 /index 地址。 然后再次执行 /index 的时候就相当于刷新了。 只是现在都是使用redirect 进行网页的重定向。Redirect 代码演示:#删除书籍的函数 def remove_book(request,bookid): book = Bookinfor.objects.get(book_id=bookid) book.delete() return redirect('/index') 两者的功能是一样的。 返回目录

ubuntu16 PL-SLAM编译 踩坑

首先贴出pl-slam readme的第一句话:对pl-slam的精度不要有太高要求。 Notice that this repository is only an open-source version of PL-SLAM released with the aim of being useful for the community, however, it is far from being optimized and we are not including some features of PL-SLAM. stvo-pl plsvo plslam 保存轨迹 完整ref: https://zhuanlan.zhihu.com/p/157900327 apt-get安装依赖 yaml 出现 ros路径下的yaml/init.py中 不存在import error问题: 取消anaconda的环境路径后,就没有问题了 编译安装wxwidgets-2.8: opengl library not available, 无法找到opengl的GL和mesa库,无法完成编译。 采用apt-get下载的wxWidgets2.8库: 完成了mrpt-stvo-pl和plslam的编译,单运行时候出现,ABI 1004编译的情况与现在的编译(c++ ABI 1009)不符合,没有找到解决办法,于是 于是autoremove 卸载了 和libwxWidgets-dev有关的库 编译安装wxwidgets-3.1: 在make mrpt时候出现error 修改script_opencv选择 opencv344

RESLAM/ REVO 编译 实时RGBD基于边缘的slam系统

首先了解到了RESLAM: https://github.com/fabianschenk/RESLAM RESLAM在make过程中出现: /RESLAM/Relocaliser/ceresloopcloser.cpp: In member function ‘void RESLAM::CeresLoopCloser::BuildOptimizationProblem(RESLAM::CeresPoseVector&, const RelPoseConstraints&, ceres::Problem*)’: /home/lincent/slam_sota/RESLAM/Relocaliser/ceresloopcloser.cpp:54:82: error: ‘EigenQuaternionParameterization’ in namespace ‘ceres’ does not name a type terization* quaternion_local_parameterization = new ceres::EigenQuater ^ CMakeFiles/RESLAM.dir/build.make:302: recipe for target 'CMakeFiles/RESLAM.dir/Relocaliser/ceresloopcloser.cpp.o' failed make[2]: *** [CMakeFiles/RESLAM.dir/Relocaliser/ceresloopcloser.cpp.o] Error 1 CMakeFiles/Makefile2:67: recipe for target 'CMakeFiles/RESLAM.dir/all' failed make[1]: *** [CMakeFiles/RESLAM.dir/all] Error 2 Makefile:83: recipe for target 'all' failed make: *** [all] Error 2 查看readme的要求: ### Requirements * [Ubuntu 16.04, 15.10, 17.

10. spark学习之旅之sbt(四)

文章目录 1. [依赖jar包的查找地址 Maven Repository仓库](https://mvnrepository.com/)2. scala中的项目管理工具sbt2.1.软件安装和配置2.2. [sbt官网案例](https://www.scala-sbt.org/1.x/docs/sbt-by-example.html) 3. sbt进阶3.1. 操作符3.2. task,里面可以定义task,task可以是执行外部的命令3.3. 待完善 4. spark之rdd小案例(`sbt构建`)4.1. PV计算4.2. UV计算4.3. TOPN 5. 所有命运赠送的礼物,早已在暗中标着价格。 1. 依赖jar包的查找地址 Maven Repository仓库 2. scala中的项目管理工具sbt sbt是类似ANT、MAVEN的构建工具,全称为Simple build tool,是Scala事实上的标准构建工具 2.1.软件安装和配置 sbt官网 Scala sbt的下载及安装 Linux安装sbt,修改镜像参照windows平台的方法 通过sbt管理项目,要在build.properties中的版本改成与本地安装一直,不然会用idea自己捆绑的 windows下安装配置sbt (重要) 安装软件到位置:D:\dev\sbt sbt安装目录下的conf目录中添加了一个repo.properties文件 [repositories] local maven-local:file://D:/apache-maven-3.5.4/local_repository nexus-aliyun: https://maven.aliyun.com/nexus/content/groups/public/ nexus-aliyun-apache: https://maven.aliyun.com/nexus/content/repositories/apache-snapshots/ mapr-public: https://maven.aliyun.com/repository/mapr-public/ typesafe: https://repo.typesafe.com/typesafe/ivy-releases/, [organization]/[module]/(scala_[scalaVersion]/)(sbt_[sbtVersion]/)[revision]/[type]s/[artifact](-[classifier]).[ext], bootOnly huaweicloud-maven: https://repo.huaweicloud.com/repository/maven/ sbt-plugin-repo: https://repo.scala-sbt.org/scalasbt/sbt-plugin-releases, [organization]/[module]/(scala_[scalaVersion]/)(sbt_[sbtVersion]/)[revision]/[type]s/[artifact](-[classifier]).[ext] sbtconfig.txt配置 -Dsbt.ivy.home=d:/sbt/.ivy2 -Dsbt.global.base=d:/sbt/.sbt -Dsbt.repository.config=d:/sbt/conf/repo.properties -Dsbt.boot.directory=d:/sbt/.sbt/boot/ -Dsbt.override.build.repos=true IDEA当中的配置 IDEA中创建maven工程后没有scala文件 注意1:第一次输入sbt的时候需要准备一些东西,所以下载比较慢,主要下载内容已经放到了我的百度云盘:windows10平台,.ivy2和.sbt默认在c盘用的家目录下面,建议配置到自己的安装目录下面,方便管理注意2:遇到了一个错误There may be incompatibilities among your library dependencies; run 'evicted 解决: 需要把C:\Users\59404\AppData\Local\Temp目录下的内容清理一下,由于安装了多个版本导致。 .

Matlab-函数拟合

文章目录 0. 评价指标1. 工具箱拟合——cftool2. 万能拟合 ——nlinfit3. 多项式拟合 ——polyfit参考 0. 评价指标 一、SSE(和方差) 该统计参数计算的是拟合数据和原始数据对应点的误差的平方和,计算公式如下 SSE越接近于0,说明模型选择和拟合更好,数据预测也越成功。接下来的MSE和RMSE因为和SSE是同出一宗,所以效果一样 二、MSE(均方差) 该统计参数是预测数据和原始数据对应点误差的平方和的均值,也就是SSE/n,和SSE没有太大的区别,计算公式如下 三、RMSE(均方根) 该统计参数,也叫回归系统的拟合标准差,是MSE的平方根,就算公式如下 在这之前,我们所有的误差参数都是基于预测值(y_hat)和原始值(y)之间的误差(即点对点)。从下面开始是所有的误差都是相对原始数据平均值(y_ba)而展开的(即点对全)!!! 四、R-square(确定系数) 在讲确定系数之前,我们需要介绍另外两个参数SSR和SST,因为确定系数就是由它们两个决定的 (1)SSR:Sum of squares of the regression,即预测数据与原始数据均值之差的平方和,公式如下 (2)SST:Total sum of squares,即原始数据和均值之差的平方和,公式如下 细心的网友会发现,SST=SSE+SSR,呵呵只是一个有趣的问题。而我们的“确定系数”是定义为SSR和SST的比值,故 其实“确定系数”是通过数据的变化来表征一个拟合的好坏。由上面的表达式可以知道“确定系数”的正常取值范围为[0 1],越接近1,表明方程的变量对y的解释能力越强,这个模型对数据拟合的也较好。 1. 工具箱拟合——cftool 在命令行输入数据: x y 启动曲线拟合工具箱 命令:cftool 进入曲线拟合工具箱界面“Curve Fitting tool” 1)利用X data和Y data的下拉菜单读入数据x,y 2)选择曲线拟合类型 3)自动拟合 即可在结果窗口和曲线窗口显示出拟合结果 工具箱提供的拟合类型如下,进行简要说明,可以尝试各种不同类型拟合效果 英文名称逼近类型种类数量基础类型Custom Equations用户自定义的函数类型Exponential指数逼近2Fourier傅立叶逼近7Gaussian高斯逼近8Interpolant插值逼近4linear、nearest neighbor、cubic spline、shape-preservingPolynomial多形式逼近9linear ~、quadratic ~、cubic ~、4-9th degree ~Power幂逼近2ax^b 、ax^b + cRational有理数逼近,分子、分母共有的类型是linear ~、quadratic ~、cubic ~、4-5th degree ~;此外,分子还包括constant型Smoothing Spline平滑逼近Sum of Sin Functions正弦曲线逼近8a1sin(b1x + c1)Weibull1abx(b-1)*exp(-a*xb) 注意 : Interpolant是插值逼近仅仅是对函数进行插值画图显示,并不能得到拟合的函数。

线程池 Executor 一篇简单笔记就懂

线程池Executor 目录 1、线程池简介 2、线程池的好处 3、线程池执行任务的规则 4、线程池的分类 1)FixedThreadPool类型 2)CachedThreadPool类型 3)ScheduleThreadPool类型 4)SingleThreadExecutor类型 1、线程池简介 线程池是在java开发中很重要的一个概念,Android中的线程池和和java是保持一致的,并无什么区别。线程池是一个抽象的概念,在java中是一个接口类,用Executor表示, 具体实现类为ThreadPoolExecutor,它们位于java.util.concurrent包下面,这个接口类很短,而且接口声明就只有一个,并且注释中说明了一些情况怎么使用, package java.util.concurrent; public interface Executor { /** * Executes the given command at some time in the future. The command * may execute in a new thread, in a pooled thread, or in the calling * thread, at the discretion of the {@code Executor} implementation. * * @param command the runnable task * @throws RejectedExecutionException if this task cannot be * accepted for execution * @throws NullPointerException if command is null */ void execute(Runnable command); } 上面省略了注释,可以看注释,很管用,上面有模版,教我们怎么创建一个自己线程池,其中有段是这么说的:许多线程池的实现类对将要执行的任务的方式和时间做了限制,下面展示了串型线程池在执行任务的时候,从一个任务到下一个任务的过程。

【Opencv】Rect类介绍

Rect类介绍 Rect类是Opencv非常常用的一个类,所以在此处整理了一下Rect类的用法 1. Rect创建 矩阵创建需要4个参数,分别是左上角坐标(x,y)和矩阵的宽度和高度,所以创建时候写法为 Rect r(x,y,width,height); 2. 常用函数 2.1 size()和area() 这一组函数是用来描述矩形的尺寸和面积的。size()函数返回值就是一个size类型的变量,包括了矩形的宽度和高度,而area()函数则是返回了矩形的面积。 Rect rect1(0,0,300,300); cout << rect1.size() << endl; cout << rect1.area() << endl; 2.2 br()和tl() 这一组函数是用来描述矩形坐标点的。br()返回的是右下角坐标(BottomRight),而tl()则是返回矩形左上角坐标(TopLeft)。这两个函数返回值类型均为Point 2.3 contains()和inside() 这一组函数返回值为bool类型,用来描述点和矩形的相对位置的。 用法如下: Rect rect1(0,0,300,300); Point x(1, 1); cout << rect1.contains(x) << endl; //用来判断点x是否包含在矩形rect1中 cout<<x.inside(rect1)<<endl;//用来判断点x是否包含在矩形rect1中 从代码运行结果来看,inside函数和contains函数都是判断点和矩形相对关系的,而并非《opencv3编程入门》中所写的,inside函数用来判断矩形是否在矩形中。 3.矩形变换 Rect类可以通过简单的与一个Point类型变量相加实现矩形平移,以及与一个Size类型变量相加实现矩形的放缩。 测试如下: //平移 Mat m = imread("1.jpg"); Rect rect1(0,0,300,300); Point x(100, 100); Scalar s(255, 255, 0); rectangle(m, rect1, s); rect1 += x; rectangle(m, rect1, s); imshow("

【GIT】git clone项目后找不到项目存放在哪个文件夹,git如何修改本地默认下载仓库地址

1.问题描述 git clone 项目后找不到项目放在哪个文件夹,在git安装目录里也没找到。 2.解决方法 先 ls 找到下载的项目 接着 cd 进入该项目文件夹 最后 pwd 查看该项目的路径 3.更多技能 以上的操作帮助我们找到项目的路径,这是 git 默认 clone 存放项目的路径,如果我们想要把 clone 下载的路径,更改成自己定义的路径,那要如何操作呢?其实只需要两个命令就可以。 先 cd 进入你要更改的目录中 接着输入 git init

K8s之Pod资源管理(五)

pod是k8s管理的最小单元 pod中有多个容器,现实生产环境中只有一个容器 特点: 1.最小部署单元 2.一组容器的集合 3.一个Pod中的容器共享网络命令空间 4.Pod是短暂的 Pod容器分类: 1:infrastructure container 基础容器(透明的过程,用户无感知) 维护整个Pod网络空间 node节点操作 `查看容器的网络` [root@node1 ~]# cat /opt/kubernetes/cfg/kubelet KUBELET_OPTS="--logtostderr=true \ --v=4 \ --hostname-override=192.168.18.148 \ --kubeconfig=/opt/kubernetes/cfg/kubelet.kubeconfig \ --bootstrap-kubeconfig=/opt/kubernetes/cfg/bootstrap.kubeconfig \ --config=/opt/kubernetes/cfg/kubelet.config \ --cert-dir=/opt/kubernetes/ssl \ --pod-infra-container-image=registry.cn-hangzhou.aliyuncs.com/google-containers/pause-amd64:3.0" #提示网络组件镜像会从阿里云上进行下载 `每次创建Pod时候就会创建,与Pod对应的,对于用户是透明的` [root@node1 ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES ......此处省略多行 54d9e6ec3c02 registry.cn-hangzhou.aliyuncs.com/google-containers/pause-amd64:3.0 "/pause" #网络组件会被自动加载成一个组件提供出去 `结论:基础容器在创建时,一定会去创建一个网络容器` 2:initcontainers 初始化容器 pod在进行创建时一定会被执行当中的初始化initcontainers,在老版本中执行时不会区分前后顺序(在系统进行加载时PID号数字越小,优先级别越高,越先被启动),随着云平台的改进,启动模式改为主机形式,分隔出的初始化容器会被优先加载,在初始化容器加载完成之后后面的业务容器才能正常接着运行 3:container 业务容器(并行启动) 官方网站:https://kubernetes.io/docs/concepts/workloads/pods/init-containers/ 示例: Init containers in use This example defines a simple Pod that has two init containers.

candence 16.6 详细安装说明

安装步骤: 安装前先关闭杀毒软件和360卫士,注意安装路径不能有中文,安装包路径也不要有中文。 试装系统:win10 64bit 1.解压安装包(共5个压缩包,每个都要解压 2.以管理员身份运行安装程序。 3.选择License Manager。 4.点击NEXT。 5.选择I accept,然后点击NEXT。 6.选择License Manager的安装目录(注意不要有中文),然后点击NEXT。 7.点击NEXT。 8.点击Install。 9.点击Cancel。 10.点击FINISH。 11.接下来选择安装production。 12.点击NEXT。 13.选择I accept,然后点击NEXT。 14.选择Complete,然后点击NEXT。 15.5280@后面填写你的计算机名,然后点击NEXT。 16.点击Install,当被询问Disk2,Disk3,Disk4时,文件路径指向第一步解压后的相关文件夹中的cab文件。 17.点击Finish,安装完成。 18.将安装路径pspice文件夹下的orSimSetup.dll文件剪切到桌面(破解完后再复制回来)。 19.将破解文件中的cdslmd.exe复制到安装目录的License Manager文件夹下,覆盖原文件。 20.将破解文件夹中License Manager文件夹下的三个文件复制到安装目录License Manager文件夹下,双击运行LicenseManager.cmd。 21.将破解文件夹中Tools文件夹下的三个文件复制到安装目录SPB_16.6\tools文件夹下,双击运行Tools.cmd。 22.将破解文件中LicGen文件夹复制到安装目录cadence下。 23.打开LicGen文件夹,src.lic文件以记事本打开,其中cesc替换成你的计算机名,保存。然后双击运行LicGen.cmd,记住生成的license.lic文件路径。 24.打开安装目录LicenseManager文件夹下LicenseServerConfiguration.exe,license文件路径指向上一步生成的License文件。然后点击NEXT,最后点击Finish。 25.打开LicenseClientConfiguration.exe,然后点击NEXT,然后点击确定,最后点击Finish。 26.打开lmtools.exe,在Config Services中Path to the license file中指向之前生成license.lic文件的路径,然后点击Save Service。 27.将之前剪切的orSimSetup.dll复制回原路径。

2020-02-15 Vue在使用extend动态挂载子组件时的双向传参问题

- 首先是父组件这边: import Post from "../components/post.vue"; //首先制作一个vue组件 import Vue from "vue"; //import之 。。。略。。。 methods: { popupPost: function() { //开始创建弹窗子组件 const PostBox = Vue.extend(Post); //extend之 let instance = new PostBox({ propsData: { // 使用propsData向子组件传参,这里是关键! xclose: this.xclose //传入一个回调函数 myVal: 'hello world' //传入一个普通变量 } }); let PostEl = instance.$mount().$el; //生成子组件的HTML部分 //挂载到一个名叫post_location的div中,此处也可以是BODY document.getElementById("post_location").appendChild(PostEl); }, xclose: function() { //这个回调,给子组件完成任务后触发 console.log("OK") } 。。。略。。。 - 然后是子组件这边: export default { name: "post", props: { // 在这里定义props xclose: Function, //回调 myVal:String //普通变量 }, data() { .

文本处理

文本预处理 文本是一类序列数据,一篇文章可以看作是字符或单词的序列,本节将介绍文本数据的常见预处理步骤,预处理通常包括四个步骤: 1.读入文本 2.分词 3.建立字典,将每个词映射到一个唯一的索引(index) 4.将文本从词的序列转换为索引的序列,方便输入模型 语言模型 一段自然语言文本可以看作是一个离散时间序列,给定一个长度为 T 的词的序列 w1,w2,…,wT ,语言模型的目标就是评估该序列是否合理,即计算该序列的概率: P(w1,w2,…,wT). 本节我们介绍基于统计的语言模型,主要是 n 元语法( n -gram)。在后续内容中,我们将会介绍基于神经网络的语言模型。 语言模型 假设序列 w1,w2,…,wT 中的每个词是依次生成的,我们有 P(w1,w2,…,wT)=∏t=1TP(wt∣w1,…,wt−1)=P(w1)P(w2∣w1)⋯P(wT∣w1w2⋯wT−1) 例如,一段含有4个词的文本序列的概率 P(w1,w2,w3,w4)=P(w1)P(w2∣w1)P(w3∣w1,w2)P(w4∣w1,w2,w3). 语言模型的参数就是词的概率以及给定前几个词情况下的条件概率。设训练数据集为一个大型文本语料库,如维基百科的所有条目,词的概率可以通过该词在训练数据集中的相对词频来计算,例如, w1 的概率可以计算为: P^(w1)=n(w1)n 其中 n(w1) 为语料库中以 w1 作为第一个词的文本的数量, n 为语料库中文本的总数量。 类似的,给定 w1 情况下, w2 的条件概率可以计算为: P^(w2∣w1)=n(w1,w2)n(w1) 其中 n(w1,w2) 为语料库中以 w1 作为第一个词, w2 作为第二个词的文本的数量。 n元语法 序列长度增加,计算和存储多个词共同出现的概率的复杂度会呈指数级增加。 n 元语法通过马尔可夫假设简化模型,马尔科夫假设是指一个词的出现只与前面 n 个词相关,即 n 阶马尔可夫链(Markov chain of order n ),如果 n=1 ,那么有 P(w3∣w1,w2)=P(w3∣w2) 。基于 n−1 阶马尔可夫链,我们可以将语言模型改写为 P(w1,w2,…,wT)=∏t=1TP(wt∣wt−(n−1),…,wt−1).

STM32F103ZET6学习记录——在彩屏上显示RTC时钟的时间

利用RTC和彩屏将RTC实时时钟的数据通过彩屏显示出来。 main.c #include "system.h" #include "SysTick.h" #include "led.h" #include "usart.h" #include "rtc.h" #include "tftlcd.h" /******************************************************************************* * 函 数 名 : main * 函数功能 : 主函数 * 输 入 : 无 * 输 出 : 无 *******************************************************************************/ int main() { char a[]="Set by SaBo"; u8 i=0, j = 0; SysTick_Init(72); NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //中断优先级分组 分2组 LED_Init(); USART1_Init(9600); RTC_Init(); TFTLCD_Init(); //LCD初始化 FRONT_COLOR=BLACK; while(1) { LCD_ShowString(10,10,tftlcd_data.width,tftlcd_data.height,12,&a[j]); i++; if(i%20==0) { led1=!led1; } delay_ms(10); } } rtc.

STM32F103ZET6学习记录——利用延时制作的门铃

学习51的时候看了定时器设计的门铃,在32之中我将其用滴答计时器实现。 将程序下载到开发板上之后,按下上键蜂鸣器会发出ding,dong的声音,然后停下不发声,程序中使用led1来检测我们的程序是否正常的在运作中 main.c /************************************************************************* * 实验现象 : 按下ZET6板子的上键会发出叮咚的响声,类似于门铃 * 2020-2-14 12:26 **************************************************************************/ #include "system.h" #include "SysTick.h" #include "led.h" #include "beep.h" #include "key.h" #define ModeNum 2 /******************************************************************************* * 函 数 名 : main * 函数功能 : 主函数 * 输 入 : 无 * 输 出 : 无 *******************************************************************************/ int main() { u16 j = 0, n, flag, i; u8 ding, dong; SysTick_Init(72); LED_Init(); BEEP_Init(); KEY_init(); while(1) { j = KEY_Scan(0); //使用j变量获取按键按下的键 if(j == KEY_UP) //按下上键表示按下门铃 { flag = 0; } if(flag !

The connected J-Link is defective,Proper operation cannot be guaranteed......的解決方法

问题背景 在学习STM32过程中,点击Keil 5 的配置魔术棒选项卡中的Debug选项,进入“Settings”后,弹窗提示J-Link有缺陷。问题出现的软饮版本如下: 调试工具J-Link-ARM Hardware版本:V8.0Keil5版本:V5.24.2.0 问题解决方案: 出现这个现象是 Keil 软件的J-Link和调试工具的J-Link的驱动不匹配。由于该调试工具之前在Keil 4使用正常,猜测是使用keil 5版本后,调试工具J-Link的驱动太老,Keil软件的J-Link驱动太新。所以产生两种解决方案: 经过实践,方案2为有效方案。 方案1.升级调试工具J-Link驱动。方案2.降低调试工具J-Link驱动。 方案2.降低Keil软件的J-Link驱动操作流程 下载并安装J-LINK驱动 Setup_JLink_V512d,点击“这里”下载,版本为:5.12然后安装后,把安装路径下的“JLink.exe”、“JLinkARM.dll”、“JLinkRDI.dll”,拷贝覆盖到keil安装目录的“keil”-“ARM”-“Segger”里面。这样就完成Keil软件预设的J-Link驱动的替换。

jquery下拉框带搜索框

1.开发中会遇到下拉框中的数据很多,一个个找比较麻烦,所以下拉框携带可以模糊搜索的文本框就会事半功倍。 参考链接:https://blog.csdn.net/BigBoySunshine/article/details/88293931 2.首先需要引入css和js文件,由于是基于jquery的所以引入文件的时候把jquery放到最前面,如下: <script type="text/javascript" src="<%=path %>/skin/jquery.js"></script> <link rel="stylesheet" href="<%=path %>/skin/selectSearch/css/jquery.searchableSelect.css"> <script src="<%=path %>/skin/selectSearch/js/jquery.searchableSelect.js"></script> 3.html代码: <div style="display: inline-block"> <select id="guojia" name="gj" style="width:250px;"> <option value="-1">请选择</option> </select> </div> 4.js代码:(注意:ajax加载数据到下拉框中后一定要初始化下拉框:$("#guojia").searchableSelect();//初始化下拉框) $(function(){ var guojiaVal = "${xunpanList.gj}"; getGuojia(guojiaVal);//获取所有的国家 }); function getGuojia(guojiaVal){ $.ajax({ //几个参数需要注意一下 type: "POST",//方法类型 dataType: "json",//预期服务器返回的数据类型 url: context+"/basedata/getGuojia",//url success: function (res) { resval=res; if (res!=null) { for(let i=0;i<res.length;i++){ var keys = res[i].country_code; var values = res[i].cname; var sel = document.getElementById("guojia");//获取下拉选对象 var option = new Option(values,keys); sel.