机器学习基础17-基于波士顿房价(Boston House Price)数据集训练模型的整个过程讲解
在这个项目中将分析研究波士顿房价(Boston House Price)数据集,这个数据集中的每一行数据都是对波士顿周边或城镇房价的描述。数据是1978年统计收集的。数据中包含以下14个特征和506条数据(UCI机器学习仓库中的定义)。· CRIM:城镇人均犯罪率。· ZN:住宅用地所占比例。· INDUS:城镇中非住宅用地所占比例。· CHAS:CHAS虚拟变量,用于回归分析。· NOX:环保指数。· RM:每栋住宅的房间数。· AGE:1940年以前建成的自住单位的比例。_波士顿房价数据集
opencv案例06-基于opencv图像匹配的消防通道障碍物检测与深度yolo检测的对比
由于摄像头固定的情况下,获取的图像中指定区域内的背景内容不会发生较大变化,因此可以认为背景模板图像中的检测到的角点与在待匹配图像中的相应位置的匹配的角点之间的相对位移应该很小。考虑到消防通道场景中光线问题,采用对光照变化具有一定抗干扰性的Harris角点作为特征点,该类特征点是有灰度图像的二阶导数计算而来,通常存在于图像中像素邻域内出现多个方向上的灰度变化的像素点上,因此能够很好的表示图像中的灰度值的变化范围,而光照变化对图像灰度值的影响在邻域范围内通常很小,因此Harris角点对光照具有一定的稳定性。
小白学Go基础01-Go 语言的介绍
Go 语言对传统的面向对象开发进行了重新思考,并且提供了更高效的复用代码的手段。Go 语言还让用户能更高效地利用昂贵服务器上的所有核心,而且它编译大型项目的速度也很快。
小白学Go 基础02-了解Go语言的诞生与演进
Go语言诞生于何时?它的最初设计者是谁?它为什么被命名为Go?它的设计目标是什么?它如今发展得怎么样?带着这些问题,我们一起穿越时空,回到2007年9月Go语言诞生的那一历史时刻吧。
小白学go基础03-了解Go项目的项目结构
我们先来看看第一个Go项目——Go语言自身——的项目结构是什么样的。Go项目的项目结构自1.0版本发布以来一直十分稳定,直到现在Go项目的顶层结构基本没有大的改变。截至Go项目commit 1e3ffb0c(2019.5.14),作为Go语言的创世项目,Go的项目结构的布局对后续的Go语言项目具有重要的参考意义,尤其是早期Go项目中src目录下面的结构,更是在后续被Go社区作为Go应用项目结构的模板广泛使用。以早期的的src目录下的结构为例关于上面src目录下的结构,笔者总结了以下三个特点。
小白学go基础04-命名惯例对标识符进行命名
计算机科学中只有两件难事:缓存失效和命名。命名是编程语言的要求,但是好的命名却是为了提高程序的可读性和可维护性。好的命名是什么样子的呢?Go语言的贡献者和布道师Dave Cheney给出了一个说法:“一个好笑话,如果你必须解释它,那就不好笑了。好的命名也类似。”无论哪门编程语言,良好的命名都应该遵循一些通用的原则,但就像之前提到的“语言影响思维”的假说那样,不同的编程语言会有一些个性化的命名惯例。
小白学go基础05-变量声明形式
和Python、Ruby等动态脚本语言不同,Go语言沿袭了静态编译型语言的传统:使用变量之前需要先进行变量的声明。如果让Go语言的设计者重新设计一次变量声明语法,相信他们很大可能不会再给予Gopher这么大的变量声明灵活性,但目前这一切都无法改变。Go语言有两类变量。●):在package级别可见的变量。如果是导出变量,则该包级变量也可以被视为全局变量。●:函数或方法体内声明的变量,仅在函数或方法体内可见。下面来分别说明实现这两类变量在声明形式选择上保持一致性的一些最佳实践。
小白学go基础06-了解切片实现原理并高效使用
slice,中文多译为切片,是Go语言在数组之上提供的一个重要的抽象数据类型。在Go语言中,对于绝大多数需要使用数组的场合,切片实现了完美替代。并且和数组相比,切片提供了更灵活、更高效的数据序列访问接口。
go基础07-了解map实现原理并高效使用
对于C程序员出身的Gopher来说,map类型是和切片、interface一样能让他们感受到Go语言先进性的重要语法元素。map类型也是Go语言中最常用的数据类型之一。
go基础08-map的内部实现
和切片相比,map类型的内部实现要复杂得多。Go运行时使用一张哈希表来实现抽象的map类型。运行时实现了map操作的所有功能,包括查找、插入、删除、遍历等。在编译阶段,Go编译器会将语法层面的map操作重写成运行时对应的函数调用。下图是map类型在运行时层实现的示意图。
go基础09-Go语言的字符串类型
字符串类型是现代编程语言中最常使用的数据类型之一。这给C程序员在使用字符串时带来一些问题,诸如:● 类型安全性差;● 字符串操作要时时刻刻考虑结尾的’\0’;● 字符串数据可变(主要指以字符数组形式定义的字符串类型);● 获取字符串长度代价大(O(n)的时间复杂度);● 未内置对非ASCII字符(如中文字符)的处理。Go语言修复了C语言的这一“缺陷”,内置了string类型,统一了对字符串的抽象。
go基础10 -字符串的高效构造与转换
● strings.Join连接构建字符串的平均性能最稳定,如果输入的多个字符串是以[]string承载的,那么strings.Join也是不错的选择;前面提到过,Go原生支持通过+/+=操作符来连接多个字符串以构造一个更长的字符串,并且通过+/+=操作符的字符串连接构造是最自然、开发体验最好的一种。● 使用操作符连接的方式最直观、最自然,在编译器知晓欲连接的字符串个数的情况下,使用此种方式可以得到编译器的优化处理;● 做了预初始化的strings.Builder连接构建字符串效率最高;
Go基础11-理解Go语言的包导入
Go语言是使用包(package)作为基本单元来组织源码的,可以说一个Go程序就是由一些包链接在一起构建而成的。虽然与Java、Python等语言相比这算不上什么创新,但与祖辈C语言的头文件包含机制相比则是“先进”了许多。编译速度快是这种“先进性”的一个突出表现,即便每次编译都是从零开始。Go语言的这种以包为基本构建单元的构建模型使依赖分析变得十分简单,避免了C语言那种通过头文件分析依赖的巨大开销。Go编译速度快的原因具体体现在以下三方面。
Go基础12-理解Go语言表达式的求值顺序
Go语言在变量声明、初始化以及赋值语句上相比其先祖C语言做了一些改进,诸如:● 支持在同一行声明和初始化多个变量(不同类型也可以)● 支持在同一行对多个变量进行赋值这种语法糖在给我们带来便利的同时,也可能带来一些令人困惑的问题。Go语言之父Rob Pike在Go语言早期(r60版本,2011年)曾经讲过一门名为“The GoProgramming Language” [1] 的课程,虽然距今年代有些久远,但该课程仍然是笔者心中的经典,强烈推荐Gopher学习一下。
Go基础13-理解Go语言代码块与作用域
Go语言中的代码块是包裹在一对大括号内部的声明和语句,且代码块支持嵌套。如果一对大括号之间没有任何语句,那么称这个代码块为空代码块。代码块是代码执行流流转的基本单元,代码执行流总是从一个代码块跳到另一个代码块。// 这里是显式代码块,包裹在函数的函数体内// ...for {// 这里是显式代码块,包裹在for循环体内// 该代码块也是嵌套在函数体显式代码块内部的代码块// ...if true {// 这里是显式代码块,包裹在if语句的true分支内。
Go基础14-了解Go语言控制语句惯用法及使用注意事项
Go语言的控制结构全面继承了C语言的语法,并进行了一些创新:● 总体上继承了C语言的控制语句关键字和使用方式;● 坚持“一件事情仅有一种做法”的设计理念,仅保留for这一种循环控制语句,;● 为break和continue增加后接能力;● switch的case语句执行完毕后,默认不会像C语言那样继续执行下一个case中的语句,除非显式使用,这“填补”了C语言中每个case语句都要以break收尾的“坑”;● switch的case语句列表;
Go 基础15-在init()函数中检查包级变量的初始状态
从程序逻辑结构角度来看,包(package)是Go程序逻辑封装的基本单元,每个包都可以理解为一个“自治”的、封装良好的、对外部暴露有限接口的基本单元。一个Go程序就是由一组包组成的。在Go包这一基本单元中分布着等,我们要保证包内部的这些元素在被使用之前处于合理有效的初始状态,。在Go语言中,我们一般通过包的init函数来完成这一工作。
Go基础16-defer的运作机制及常见用法
defer的运作离不开函数,这至少有两层含义:● 在Go中,只有在函数和方法内部才能使用defer;● defer关键字后面只能接函数或方法,这些函数被称为deferred函数。defer将它们注册到其所在goroutine用于存放deferred函数的栈数据结构中,这些deferred函数将在执行defer的函数退出前被无论是执行到函数体尾部返回,还是在某个错误处理分支显式调用return返回,抑或出现panic,已经存储到deferred函数栈中的函数都会被调度执行。
Go基础17-明确哪些函数可以作为deferred函数?
func(&sl)之后虽然sl被重新赋值,但是在foo2返回后,deferred函数被调度执行时,deferred函数的参数值依然为sl的地址,而此时sl的值已经变为[]int{3, 2, 1},因此foo2输出的结果为[3 2 1]。之后虽然sl被重新赋值,但是在foo1返回后,deferred函数被调度执行时,deferred函数的参数值依然为[]int{1, 2, 3},因此foo1输出的结果为[1 2 3]。册到deferred函数栈的时候,都会对该匿名函数的参数进行求值。根据上述代码逻辑,依。
Go基础18-理解方法的本质以选择正确的receiver类型
Go语言虽然不支持经典的面向对象语法元素,比如类、对象、继承等,但Go语言也有方法。和函数相比,Go语言中的方法在声明形式上仅仅多了一个参数,Go称之为receiver参数。上面方法声明中的T称为receiver的基类型。通过receiver,上述方法被绑定到类型T上。Go方法具有如下特点。1)方法名的首字母是否大写决定了该方法是不是导出方法。2)方法定义要与类型定义放在同一个包内。
今日推荐
周排行