Scala—Java的避难所:第一部分:main(String[])

[b] [color=red]注意[/color][/b]:[color=orange]因为本文使用的Scala版本较老,部分内容已经不适用于当前Scala版本(比如关于"+="运算符的优先级)。[/color][color=green]2010.1.4[/color]

[quote][color=red]前言[/color]: 本文是[url=http://www.codecommit.com/blog/scala/roundup-scala-for-java-refugees]Scala--Java的避难所[/url]的第一部分.也是我学习Scala时认真阅读的第一份资料.我把它翻译过来,方便那些对Scala感兴趣的Javaer看.我尽量按原文的意思翻译(考虑到我的英语水平,你不必对这话太当真^_^).但原文某些地方我加上了自己的解释或看法,一律以[color=cyan]译者注[/color]标明.
  另外,对于标题取为"Scala—JAVA的避难所"其实我并不感冒.但原文是这样,我也就这样翻译了.[/quote]
  你可能已经使用JAVA若干年了,或许JAVA是你接触编程来的第一门编程语言,或许是作为比C++更好的一个选择.不管怎么样,你已经适应了JAVA,并了解她的外观与内在,能够体会它的喜怒与哀乐(原文:You’re comfortable with Java, you know its ins and outs, its moods).她就像你相处多年的女朋友,或许刚相识时那种激情已经不再,但你已经熟悉怎样才能让她开心.简单的说,如果你是一位工匠,则JAVA就是你干活的工具.
  然而,你和JAVA的蜜月期过去了,你在编程语言的选择上更加务实了.只要有足够的理由,你就可以毫不犹豫去尝试一种新的语言,但JAVA还没有足够的缺陷让你下定决心离开她.此时,你听说了一个叫做Ruby的东东,它的简洁优雅以及巨大的威力给你留下深刻的印象.但你并不是那么确定去使用一个脚步语言来构建你的企业应用.动态类型以及TextMate确实都不错,但对于现实世界,你需要一个更坚实的支柱.作为一个实用主义者,你仍然坚持使用JAVA.
  这时,好消息传来了.一门新的编程语言登上了舞台并在开发者的世界引起了一场风暴.Scala貌似具有你对一门编程语言所期待一切: 静态类型,编译为字节码,简洁且富有表现力的语法.你可能已经被它的一些例子给深深吸引了.它看起来和JAVA非常相似,但是剔除了JAVA中冗余的语法结构.Scala没有分号,没有public static void的方法修饰词,并且具有静态类型推断机制.
  现在剩下的唯一问题就是你应该从何开始.你也许尝试过去Scala的网站查看相关知识,但是..这一切看起来是那么的函数化:Lamdas,high-order functions,immutable state,recursion out the wazoo.突然让人感到前途未卜.
  但是,JavaEE的难民们,不必担心.Scala确实是一门函数式的编程语言,但它同样也是命令式的和面向对象的.也就是说,除了书写那种晦涩难懂的函数式代码(原文: It means that you don’t have to write code with the sole purpose of pleasing Haskell Curry. ),你还有其它的选择.你可以书写可读性很强的代码,以便你一个星期之后还能看懂它.将你的代码给你那些只使用JAVA的同事看,他们甚至也能看懂它.只需要一个正确的引导,你就可以使用Scala来构建你的的JAVA应用.

[size=large][color=blue]导读:[/color][/size]
  如果符合上面所说的,那么这个Scala系列就是为你而准备的.我已经阅读过大量有关Scala的文章以及入门材料(如果你更喜欢函数式的编程,我强烈推荐你去看Alex Blewitt写的[url=http://alblue.blogspot.com/2007/10/scala-introduction-to-scala-interpreter.html]系列文章[/url]),但很少有文章是为了使JAVA开发比较轻松的转变到Scala来的.我个人缺乏FP(函数式编程)的经验,因此我肯定不会在文章中介绍如何将Scheme代码移植到Scala.该系列文章着重于类比Scala与JAVA,并说明为什么Scala比JAVA更好.

[size=large][color=blue]起步:[/color][/size]
object HelloWorld extends Application{
println("Hello, World!")
}


  没有什么比用代码来获得知识更直接了,注意到上面的代码没有使用分号.当然,如果你愿意还是可以像在JAVA中一样使用它.但除非你想在同一行中书写多个语句,否则分号不是必须的.这个代码示例含义非常清楚,想必你已经看明白了它的功能.没错,就是向标准控制台输出一行"Hello, World!".你可以将这些代码保存到一个后缀名为scala的文件中,然后使用scala编译器编译它,编译的结果是一个单独的class文件([color=cyan]译者注:这里原文似乎有错,我编译后事实上生成了两个class文件[/color]).你可以像运行普通java文件那样使用java解释器来运行它,不过你需要注意一下classpath.最直接的方法是使用scala命令:
[quote]scalac hello.scala
scala HelloWorld[/quote]

  注意到"hello.scala"文件名没有?Scala并不像Java一样强制你在定义public class时,必须保存在文件名与类名相同的文件中.事实上Scala允许你像C++或Ruby一样,在同一个文件中你想定义多少class都可以.但我们最好还是遵循Java的命名规则,因此作为一个具有良好习惯的程序员,我们应该将上面的代码保存为"HelloWorld.scala".

[size=large][color=blue]编辑器:[/color][/size]
  在刚开始接触Scala,选择一个正确的编辑器是个关键.就像你在使用Java中所了解的那样,IDE非常有用.但作为一门新生的编程语言,Scala目前还没有很好的IDE支持,不过这只是时间问题.在目前,你只有非常有限的选择:
[quote]Eclipse(有几个不太成熟的Scala插件)
Emacs
IntelliJ(只支持基本的语法高亮)
TextMate
VIM
jEdit[/quote]([color=cyan]译者注:我使用的是UltraEdit,自己配置一下,能够自动缩进与语法高亮以及编译运行,凑合着用了[/color])
  上面列的是几个主要的选项,更完整的列表可以去Scala安装目录下的[color=darkblue]misc/scala-tool-support/[/color]文件夹下查看.我个人推荐使用jEidt或者TextMate;如果你有冒险精神,可以去尝试Eclipse上的几个插件.Eclipse上的插件具有通常IDE所具有的一些功能(至少[url=http://osdir.com/ml/lang.scala/2006-02/msg00002.html]Beta版[/url]是这样),譬如语义高亮,代码自动完成,etc.但根据我的经验,这些插件都不够稳定以至于难以使用.Scala是一门比Java简洁多的语言,它对IDE的依赖性比Java小得多,因此这些都不是本质问题,你可以照样做的很好.

  再来一个例子
object HelloWorld2{
def main(args:Array[String]) = {
var greeting =""
for(i <- 0 until args.length){
greeting += (args(i) + " ")
}
if(args.length > 0) greeting =greeting.substring(0, greeting.length -1 )

println(greeting)
}
}

([color=cyan]译者注: 可能有读者会奇怪greeting += (args(i) + " ")这段代码为什么要用括号,注意,虽然与习惯不同,但这里的括号是必须的.因为在Scala里面,运算符的优先级由运算符第一个字符代表的运算符的优先级确定.就是说"+="的优先级与"+"的优先级一样,然后..自己想吧:-).BTW,Scala里的运算符也是方法&对象..[/color])
  将它保存到HelloWorld2.scala,并使用如下命令编译运行:
[quote]scalac HelloWorld2.scala
scala HelloWorld2 Hello, World![/quote]
  这次我们使用了不同的方式,通过命令行向程序传递参数,其运行的结果同样是在控制台输出"Hello, World".这个程序比上一个复杂一些,首先定义了一个String类型的变量greeting,然后遍历一个数组,最后对String进行适当的处理(Scala专家肯定会建议使用Array#deepMkString(String)(类似于Ruby中的Array::join方法),这样确实没错.但我这里主要是为了介绍一些语言上的知识,而不是API的使用).

  首先应该注意的是,这里我们定义了一个main方法.在第一个例子中,我们仅仅继承了Application类,然后把其它的都交给默认构造函数来做.这样很好很简洁,但有两个问题:第一,我们没有办法向程序传递命令行参数;第二,对Scala新手来说,这样看起来有点魔幻.我将在后面的文章中揭开第一个例子中背后的把戏,现在你记住它就是了.
  这个例子中的main方法是不是已经让你联想到了JAVA中的 public static void main?没错,Scala中的main就对应Java中的 public static void main.根据这个信息,有经验的程序员就可以通过思考知道更多关于Scala的知识.
  一开始,你可能有这样的结论:Scala中的方法隐含就是public的.这基本正确,Scala中的方法默认为public,这意味着Scala中没有public方法修饰词(private与protected都有定义).更进一步的,你会猜测:Scala中的方法默认为static的.然而,这次你的猜想不完全正确.
  Scala并没有真正意义上的static属性.你越早认识到这一点,你就越容易理解这门语言.作为替代,Scala有专门的语法让你实现与使用sigleton模式(这正是object的含义).我们实际上声明了一个具有实例方法main(译者注:注意,这个main方法并不是static的)的单实例类(singleton class).我将会在以后详细说明这一点,目前你可以认为object就是一个只具有静态方法的类.([color=cyan]译者注:这个描述不甚准确[/color]).
  仔细的观察这个例子,我们还可以得到Scala中数组的语法,以及如何显式的指明一个变量的类型.让我们仔细研究一下声明main方法的这行代码:

def main(args:Array[String]) = {

  这儿,args是一个Array[String]类型的方法参数.也就是说,args是一个String数组.在Scala中,Array是一个具有类型参数指明其元素类型的类(一个真正的类,而不是JAVA中那样).与之对等的JAVA语法应该类似与下面这样子(假设Java中也有一个Array类):
public static void main(Array<String> args)

  在Scala中,使用variable:Type的语法来指明变量类型.因此,如果我们想显式声明一个Int类型的变量,应该通过如下方式
var myInteger:Int


  在例子中,我们实际上声明了一个String类型的变量greeting.然而,得益于Scala中的类型推断机制,我们并没有显式指明变量的类型.下面两种方式在语义上是等价的:

var greeting =""

var greeting:String =""

  在第一种方式中,我们显然知道greeting是一个String,Scala编译器也能够推断出这一点.这两个变量都是静态类型检查的,只不过第一种方式可以少写7个字符:-)
细心的读者可能还注意到了,例子中的main方法并没有指明返回类型.这是因为Scala同样可以推断出来.如果我们想显式的指明这点,可以像下面这样:

def main(args:Array[String]):Unit = {


  如前面一样,类型在方法名之后,并用冒号隔开.顺便提一下,Unit是Scala中的一个类型,它表示"我不关心返回的究竟是什么东东"(原文:I-really-don't-care-what-I-return),你可以把它想象为JAVA中void类型与对象的混合物([color=cyan]译者注:但Unit不是void,而是一个实实在在的类,也就是说Unit类型的方法会返回一个Unit对象[/color]).

[size=large][color=blue]数组的遍历:[/color][/size]

var greeting =""
for(i <- 0 until args.length) {
greeting += (args(i) + " ")
}

([color=cyan]译者注: 目前Scala中这种方式遍历的性能相对低下,速度大概是JAVA中对应for的1/60.这个其实也不会造成太大的影响,因为耗时一般不在于for循环本身,而是循环体内的操作.更何况在Scala中用for的机会不多,有更多简单实用的方式去实现同样的操作[/color])

  这段代码比刚才那段稍微复杂点.我们一开始声明了一个String类型的变量greeting,然后使用了一个在Scala中不常用的for循环,这里有一些隐含的类型推断.有Ruby经验的知道在Ruby中的等价形式:

for i in 0..(args.size - 1)
greeting += args[i] + " "
end

  问题的关键在于,Scala的for循环语句需要一个Range对象,而这个Range对象是由RichInt的until方法建立的.我们可以把上面的代码分开写:

val range =0.until(args.length)
for(i <- range) {

  注意,这里使用"val"而不是"var"声明变量.使用val,就如java中final的语义,指明range是一个常量.
  在Scala中,我们可以通过多种不同的形式调用方法.在这个例子中,我们看到了"value methodName param"与"value.methodName(param)"这两种形式的语法是等价的.另外一个很重要的事情是,until方法是RichInt具有的,Int并没有该方法.这里存在一个隐式类型转换,将Int类型的0转换为scala.runtime.RichInt的一个实例.这里不去深究这个类型转换是怎样进行的,我们关心的是RichInt类确实有一个返回Rangle对象的until方法.
因此,事实上这段代码与JAVA中的下列代码在逻辑上是等价的:

for (int i = 0; i < args.length; i++) {


  只不过在JAVA中是显式的遍历整个区间,而Scala中使用了一个Range对象.
可能你还注意到了,循环体中访问数组args元素使用的是圆括号"()",而不是我们习惯的方括号"[]".

[size=large][color=blue]更好的遍历方式:[/color][/size]
  在JAVA 5中引入了一个foreach的语法,像下面这样:

for(String arg: args) {
greeting += arg + " ";
}


  这样更简洁明了.Scala中使用高阶函数(使用函数做参数的函数)实现类似的功能:

args.foreach {arg =>
greeting += (arg + " ")
}


  我们可以看到,Array类有一个foreach方法,这个方法将一个函数作为参数.foreach方法将会对Array里的每一个元素调用一次这个函数,并在调用的时候将这个元素作为函数参数传递给函数.这里参数arg没有指明类型,但由于我们是对一个String数组遍历,编译器能推断出它的类型是String.我们已经提到过,Scala中调用方法有多钟不同的方式.这里我们就省略了圆括号"()",同样我们也可以写成:

args.foreach(arg => {
greeting += (arg + " ")
})

  Scala中我们可以使用更加简洁的书写方式:

args.foreach(arg => greeting +=(arg + " "))


  不错吧,现在我们将整个例子重写成:

object HelloWorld2 {
def main(args:Array[String]) = {
var greeting = ""
args.foreach(arg => greeting += (arg + " "))
if (args.length > 0) greeting = greeting.substring(0, greeting.length - 1)

println(greeting)
}
}


[size=large][color=blue]Scala的内置类型:[/color][/size]
  因为Scala是基于JVM的,因此它从JAVA那儿继承了大量的API.这意味这你能够与JAVA交互使用.并且,你所写的Scala代码事实上使用的就是Java API.比如上面的HelloWorld2中我们使用了一个字符串变量greeting,这个变量事实上就是Java中的String类型.再比如,当你在Scala中声明一个整数类型(Int),编译器会自动将它转换为Java的基本类型int.
  Scala还内置了一些隐式类型转换,当需要的时候编译器会自动进行(就像例子中的Int到RichInt类型的转换).比如在Scala中将Array[String]类型传递给需要String[]类型参数的函数时,隐式类型转换就会发生.甚至Scala中的类型参数可以和Java中的泛型相互转化.简单的说,Scala就是一个披着不同语法外衣的Java.

[size=large][color=blue]结束[/color][/size]
  Scala不需要复杂高深的理论或学术知识.一个普通的开发者就可以在下一个企业WEB应用里面使用它.它具有JAVA所缺乏的简洁明了的语法,并且保留了JAVA的高效与可靠性.

[color=cyan]译者注[/color]:本文中的HelloWorld2还有一下一些版本

object HelloWorld{
def main(args: Array[String]) {
println(args.mkString(" "))
}
}

object HelloWorld{
def main(args: Array[String]) {
println(args.reduceLeft((a:String,b:String)=>a+" "+b))
}
}

object HelloWorld{
def main(args: Array[String]) {
println(args.reduceLeft[String](_+" "+_))
}
}
使用LSTM实现自动调制识别(RML2018.01a) 目录一、LSTM的代码实现1.1 导入包1.2 数据读取及数据集划分1.3 数据预处理1.4 构建LSTM模型 本文基于RML2018.01a大型数据集,给出LSTM的信号识别的实现方式(附代码) RML2018.01a数据集信息如下: 模型 传送门 CNN/ResNet 使用CNN/ResNet实现自动调制识别(RML2018.01a) LSTM 使用LSTM实现自动调制识别(RML2018.01a)) 一、LSTM的代码实现 1.1 导入包 import numpy as np 阅读详情

相关推荐

硬件基础——mos管

文章目录前言一、寄生参数二、使用步骤1.引入库2.读入数据总结 前言 MOS管设计重点 一、寄生参数 1.寄生电容 mos管有寄生电容Cgs,此电容大小一般为pF级别,一般规格书可以查到。 使用时,要特别注意GS管教的寄生电容Cgs,控制MOS管的导通与截止,本质上是控制Cgs电容的充放电。(最好要加限流) 二、使用步骤 1.引入库 代码如下(示例): import numpy as np import pandas as pd import matplotlib.pyplot as plt imp

Malqaq的博客 6604

Scala函数式编程

一、函数式编程 1)面向对象编程 解决问题,分解对象,行为,属性,然后通过对象的关系以及行为的调用来解决问题。 对象:用户 行为:登录、连接JDBC、读取数据库 属性:用户名、密码 Scala语言是一个完全面向对象编程语言。万物皆对象 对象的本质:对数据和行为的一个封装 2)函数式编程 解决问题时,将问题分解成一个一个的步骤,将每个步骤进行封装(函数),通过调用这些封装好的步骤,解决问题。 例如:请求->用户名、密码->连接JDBC->读取数据库 Scala语言是一个完全函数式

Markble 5428

Impala>Impala安装部署

文章目录1.安装前提2.下载安装包、依赖包3.虚拟机新增磁盘(可选)4.配置本地yum源5.安装Impala6.修改Hadoop、Hive配置7.修改impala配置8.启动、关闭impala服务 1.安装前提 集群提前安装好hadoop,hive。 hive安装包scp在所有需要安装impala的节点上,因为impala需要引用hive的依赖包。 hadoop框架需要支持C程序访问接口,查看下...

qq_44509920的博客 839

array函数参数 scala_scala(三)函数

1.Scala 中使用val语句可以定义函数,def语句定义方法。classTest{defm(x:Int)=x+3valf=(x:Int)=>x+3}2.Scala方法声明格式如下:deffunctionName([参数列表]):[returntype]如果你不写等于号和方法主体,那么方法会被隐式声明为抽象(abstract),包含它的类型于是也是...

weixin_31058323的博客 481

经纬度转换为UTM坐标

UTM(通用横向墨卡托投影): 是一种以米为单位的坐标系统,用于地图和GPS导航。将地球划分为60个纵向的区域。每个区域宽6度,从赤道开始往南北两级方向划分。每个区域都有一个特定的字母。

weixin_45626706的博客 7282

5.13华为OD机试真题 新系统 - 社交网络相同爱好好友查询 (Java/Py/C/C++/Js/Go)

5.13华为OD机试真题 新系统 - 社交网络相同爱好好友查询 (Java/Py/C/C++/Js/Go)

算法大师! 157

Scala基础语法:函数的定义以及元祖

Scala函数 方法: def 函数名([参数列表])[:返回类型]={ 函数体 [return]表达式 } def main(args: Array[String]): Unit = { def square(x: Int): Int = { return x * x } println(square(2)) } square是函数名; x:Int定义了参数的类型; :Int 是输出结果类型即返回值类型 输出结果为4 上述的方式我们还可以进行简化: def ma

qq_43012693的博客 953

openbmc 支持mctp over pcie(二)

本文介绍了在OpenBMC系统中实现MCTP over PCIe的社区方案,主要针对AMD CPU和Intel CPU平台。方案基于社区开发的mctpd应用层和内核驱动,通过修改设备树(dts)配置内存区域,并编译Linux内核模块。验证时可通过查看/proc/net/protocols确认MCTP协议支持,使用ip addr命令检查mctppci0网络接口状态。相关代码和文档参考了AspeedTech和CodeConstruct的GitHub仓库。该方案为BMC作为MCTP端点提供了标准化实现方法。

wit_yuan的专栏 379

Scala基础入门学习

摘自:http://www.runoob.com/scala/scala-tutorial.html 认识Scala:scala是一门多范式的编程语言,设计初衷是要集成面向对象编程和函数式编程的各种特性。运行在java虚拟机上并兼容现有的java程序,与Java一样,scala源代码会被编译成Java字节码运行在JVM之上。 几个特性: 面向对象特性:是一种纯面向对象的语言,每个值都是对象,对象...

liangxueyuan0的博客 542

16、经皮功能性电刺激助行:Parastep系统全解析

本文全面解析了经皮功能性电刺激助行系统——Parastep系统,涵盖其发展历史、技术参数、系统设计、患者准入标准、训练方案及临床效果。作为首个获得FDA批准并商业化的非侵入性FES助行系统,Parastep为胸段截瘫患者提供了独立站立与行走的可能性,并在改善下肢血流、肌肉质量、心理状态等方面展现出显著医学与心理益处。文章还对比了其他FES系统,分析了Parastep的优势与局限,并探讨了未来技术改进方向与应用拓展前景。

l3m4n的博客 109

有道龙虾LobsterAI vs. OpenClaw:对比与安装部署攻略

LobsterAI是"中国版OpenClaw",更注重易用性和中文场景适配;OpenClaw是技术极客的玩具,需要大量命令行操作。

lpfasd123的博客 2399

IDEA快捷键

IDEA快捷键 1)快速生成程序入口:main 输入main->回车 def main(args: Array[String]): Unit = { } 2)自动补全变量:.var 输入1.var->回车 val i: Int = 2 3)快速打印:.sout 输入1.sout->回车 println(1) 4)快速生成for循环:遍历对象.for 输入1 to 3.for for (elem <- 1 to 3) { } 3) 查看当前文件的结构:Ctrl +

Huc673619的博客 406

LVGL core theme主题管理(lv_theme.c)

如果打开宏,主题的初始化是在显示设备注册时完成的。整个themes的实现放在目录下面。这里一共有三套主题(basic、default和mono)可供选择或者参考。源码中默认对接的是 default 主题,所以在中,看到的是调用default主题的接口。也就是说,如果需要更换主题,把这里面的接口换掉就可以了。或者要重新做一套主题,参考这些实现修改也就可以了。虽说有三套主题,但逻辑流程是一样的。主要完成两个工作:构造lv_theme_t结构体和初始化默认样多备用(style_init函数内实现)。构造。....

Bigan(安)的博客 3414

Scala—Java的避难所之main(String[])

<!--google_ad_client = "pub-1592932103935230";/* 336x280,csdnblogs, 创建于 08-5-10 */google_ad_slot = "8315096772";google_ad_width = 336;google_ad_height = 280;//--> <script type="text/java

红颜无暇电脑网,最新的专业 IT 资讯-http://it.hywxfashion.cn 522

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

spark 初学scala中的main方法及其参数

一:类和对象 1. scala不用class作为类的关键字,而是使用object, object是scala中的静态类,不是对象; 2.object作为scala中的一个关键字,相当于java中的public static class这样一个修饰符,意思是object中成员是静态的  所以例子中的main方法是静态的,不需要实例就可以直接被虚拟机调用,也是JVM平台的程序入口必备条件; 3.“...

a627082796的博客 6640

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

Scala与Java互操作性:Effective Scala中的兼容性最佳实践

在现代企业级应用开发中,Scala与Java的互操作性是提升开发效率的关键能力。Twitter的Effective Scala指南作为业界公认的Scala开发规范,详细阐述了如何在保持Scala语言特性的同时,确保与Java生态系统的无缝协作。本文将系统梳理这些兼容性最佳实践,帮助开发者在混合语言项目中避免常见陷阱,充分发挥两种语言的优势。 ## 为什么Scala-Java互操作性如此重要?

gitblog_00695的博客 1101

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

Scala初学者学习资料:main(String[])

本文是一位美国开发者在08年初写的Scala学习笔记的第一部分,讲述Scala中的一些基础知识,尤其是main(String[])的用法。 AD: 51CTO编辑推荐:Scala编程语言专题 你可能已经使用JAVA若干年了,或许JAVA是你接触编程来的第一门编程语言,或许是作为比C++更好的一个选择。不管怎么样,你已经适应了JAVA,并了解她的外观与内在,能够体会它的喜怒与哀乐(原文:Y

w_j_w2010的博客 715

秒懂Flink:Flink DataStream API实战教程(Java/Scala双语言)

Flink DataStream API是Apache Flink核心的流处理编程接口,支持高吞吐、低延迟的实时数据处理。本教程将通过Java和Scala两种语言,帮助新手快速掌握DataStream API的核心概念与实战技巧,轻松构建高效的流处理应用。 ## 📚 DataStream API基础入门 DataStream API作为Flink流处理的基石,提供了丰富的数据处理操作。在项目

gitblog_00945的博客 1009

jsoniter-scala完全指南:如何用Scala宏打造超高速JSON编解码器

**jsoniter-scala**是一个专为Scala语言设计的终极JSON编解码库,它利用编译时宏技术生成安全且超高速的JSON序列化和反序列化代码。如果你正在寻找一个能够大幅提升Scala应用JSON处理性能的完整解决方案,那么jsoniter-scala绝对是你的最佳选择!🚀 ## ✨ 为什么选择jsoniter-scala? 在当今的微服务和分布式系统架构中,JSON作为数据交换的

gitblog_00136的博客 802

Kafka Streams Scala 迁移指南:从 kafka-streams-scala 迁移到 Java API(含 WordCount 实战与源码解析)

> **导读**:本文基于 Apache Kafka 官方迁移文档编写,面向正在使用或计划使用 `kafka-streams-scala` 库的 Scala 开发者。该库自 Kafka 4.3 起正式标记为废弃(deprecated),并将在 Kafka 5.0 中移除。读完本文,你将掌握从 Scala 包装 API 平滑迁移到 Java Streams API 的核心差异、Serde 配置的两种

gitblog_00989的博客 494

Scala:idea中的main函数引发函数定义的思考

1.声明 当前内容主要用于本人学习和复习,当前内容主要为思考main函数产生的函数创建思考 2.思考idea方式自动创建main函数 def main(args: Array[String]): Unit = { } def定义函数,args是String类型的数组?:Unit=表示返回值类型为无返回值 得到结果:Array[String]就是String类型的数组,Unit表示无返回值,但是前面的没有: Unit= def main(args: Array[String]){ } 这个也是可以的,这说

编程学习者的博客 725

无需安装Scala:scala-maven-plugin编译/测试/运行/文档化四大核心功能完全入门

🎯 **scala-maven-plugin** 是 Maven 生态里处理 Scala 项目的主力插件:它帮你**编译、测试、运行、文档化** Scala 代码,全程无需手动安装 Scala 编译器或 sbt——只要会写 `pom.xml`、会敲 Maven 命令,就能把 Scala 项目跑起来。本文带你从零上手它的四大核心功能。 ## 一、它是什么?为什么需要 scala-maven-pl

gitblog_00179的博客 485

如何在Scala中高效处理CSV文件?scala-csv快速上手指南

在数据处理和分析任务中,CSV文件是一种常见的数据交换格式。scala-csv作为Scala生态中轻量级且功能强大的CSV处理库,提供了简洁的API和灵活的配置选项,帮助开发者轻松实现CSV文件的读写操作。本文将带你快速掌握scala-csv的核心功能和使用技巧,让你在Scala项目中高效处理CSV数据。 ## 📋 为什么选择scala-csv? scala-csv是一个专注于CSV文件处理

gitblog_00165的博客 756

5 分钟快速上手:programming-scala-book-code-examples 跑通第一个 Scala 3 示例(Hello World 实战)

想学 Scala 3 却不知道从哪下手?**programming-scala-book-code-examples** 是 O'Reilly 经典著作《Programming Scala》第 2、3 版的**官方配套代码仓库**,收录了全书全部示例源码。本文带你 5 分钟克隆仓库、配置环境,并**跑通第一个 Scala 3 示例(Hello World 实战)**,迈出上手 Scala 3 的第

gitblog_01032的博客 305

小米MiNLP Duckling实战:如何在Java和Scala中实现中文时间解析

小米自然语言处理平台(MiNLP)中的Duckling中文结构化解析工具是一个强大的**中文时间解析**库,专为处理中文时间表达式而设计。这款基于Facebook Duckling的Scala复刻版工具,在小爱同学等小米产品中得到了广泛应用,能够精准解析各种复杂的中文时间表达。本文将详细介绍如何在Java和Scala项目中集成和使用MiNLP Duckling实现高效的中文时间解析功能。 ##

gitblog_00395的博客 793

Scala day3(Array and List)

【代码】Scala day3(Array and List)

Forerunner and Successor 先駆者と後継者 1027
上一篇: 为什么选择Scala?
下一篇: Scala拾趣--从Java7说开来
JavaSxy
博客等级 码龄21年 1粉丝 25原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值