--》語言api說明文檔
--》不用庫
最根本的類Any
--》scala經常使用庫
scala.collection.mutable.Map(裏面有zip)
--》運行腳本
scala分爲腳本和程序
運行scala腳本用 scala 文件名.scala
--》一般Unit只用來聲明函數或方法的返回值,其餘場景基本是沒有意義的
--》刪除scala sudo apt-get remove scala
-->安裝scala
2.複製到home文件夾
3.tar -xzvf scala-2.11.8
4.sudo gedit /etc/profile 在其中添加
export SCALA_HOME=/home/zhaodezan/scala-2.11.8
export PATH=$SCALA_HOME/bin:$PATH
5.source /etc/profile
6.驗證 scala -version
總結:安裝步驟爲:下載編譯好的文件並解壓,添加環境變量,驗證
--》scala hello world程序
1.在myproject下建立src/org/examples文件夾
2.在其下建立Hello.scala文件,源代碼爲
package org.example
object Hello{
def main(args:Array[String]){ //固定模式,能夠背下來
println("hello,world")
//必須用雙引號,複製時必須去掉註釋,不然報錯
}
}
3.在src文件夾下執行
scalac org/examples/Hello.scala
scala org.examples.Hello
1)先scalac再scala 2)scala將生成package包名命名的文件夾3)scala 文件名.類名(類名沒有.class後綴)
--》循環for命令
1.建立keshan.scala文件
2.書寫代碼
object Test{
def main(args:Array[String]){
for(arg<-args)
{
println(arg)
}
}
}
3.編譯scalac keshan.scala
4.運行scala Test zhao de zan
--》scala數組
>val greetStrings = new Array[String](3) //建立一個長度爲3的字符串數組
greetStrings: Array[String] = Array(null, null, null)
>greetStrings(0)="Hello"
>greetStrings(1)=","
>greetStrings(2)="world!\n"
>for(i<-0 to 2){print(greetStrings(i))}
將輸出 Hello,world!
--》scala二維數組
scala> val matrix = Array.ofDim[Int](2,3)
//構建二維數組
matrix: Array[Array[Int]] = Array(Array(0, 0, 0), Array(0, 0, 0))
scala> matrix(1)(1)=5 //數組元素的引用
scala> println(matrix(1)(1))
5
--》數組的長度length
scala> val a = Array(1,3,4)
a: Array[Int] = Array(1, 3, 4)
scala> a.length
res0: Int = 3
scala> val b = Array(5,6,7)
b: Array[Int] = Array(5, 6, 7)
scala> b.length
res1: Int = 3
scala> val c = a.zip(b)
c: Array[(Int, Int)] = Array((1,5), (3,6), (4,7))
scala> c.length
res2: Int = 3
--》打印二維數組所有
scala> val a = Array(Array(1,2,3),Array(4,5,6))
a: Array[Array[Int]] = Array(Array(1, 2, 3), Array(4, 5, 6))
scala> val b = sc.parallelize(a)
b: org.apache.spark.rdd.RDD[Array[Int]] = ParallelCollectionRDD[2] at parallelize at <console>:23
scala> b.foreach(x=>(x.foreach(i=>println(i))))
--》數組形式打印二維數組
scala> var a = Array(Array(1,2),Array(4,5))
a: Array[Array[Int]] = Array(Array(1, 2), Array(4, 5))
scala> a.foreach(one=>{println(one.mkString(" "))})
1 2
4 5
--》foreach的_用法
scala> val a = Array(1,2,3)
a: Array[Int] = Array(1, 2, 3)
scala> a.foreach(_=>println(a(2)))
3
3
3
--》類,沒有構造函數,自動運行裏面的指令了
>class A{print("hello,world\n")}
defined class A
>val a = new A
hello,world
a: A = A@1c1159ee
--》程序休眠
Thread.sleep(1000000)
--》var和val的區別
var和java的變量相同,初始化以後還能夠繼續複製
val初始化以後就再也不能夠賦值了
>var a=1
>a=8
上述句子能夠
>val a=2
>a=4
將報錯error: reassignment to val
--》類變量的全局性
scala> class A{
| val a=new Array[Int](1)
| fun(a)
| println(a(0))
| def fun(b:Array[Int]){
| b(0)=1
| }
| }
defined class A
scala> val b = new A
1
b: A = A@50530c6d
注意,若將println(a(0))改成println(a)
則會打印
scala> val b =new A
[I@7067ba82
b: A = A@2a05e675
只是打印的資源的位置
--》對象成員的引用
scala> b.a
res1: Array[Int] = Array(1)
scala> b.a(0)
res2: Int = 1
scala> b.a(1)
java.lang.ArrayIndexOutOfBoundsException: 1
... 33 elided
--》scala shell中要多行打印,
則在輸入下一行的時候按回車鍵便可
結束輸入,則按esc鍵,再按回車鍵
--》zip
scala> List(1,2,3).zip(List("a","b","c"))
res0: List[(Int, String)] = List((1,a), (2,b), (3,c))
將兩個列表的元素合成一個由元素對組成的列表中
scala> val a = Array(1,2,3,4,5)
a: Array[Int] = Array(1, 2, 3, 4, 5)
scala> val b = Array(6,7,8,9,10)
b: Array[Int] = Array(6, 7, 8, 9, 10)
scala> val c = a.zip(b)
c: Array[(Int, Int)] = Array((1,6), (2,7), (3,8), (4,9), (5,10))
將兩個數組合在一塊兒
將一個二維數組和一個一維數組綁定在一塊兒,用於將訓練集等的綁定
scala> val a = new Array[Array[Float]](2)
a: Array[Array[Float]] = Array(null, null)
scala> a(0) = Array(1,2,3,4,5)
scala> a
res6: Array[Array[Float]] = Array(Array(1.0, 2.0, 3.0, 4.0, 5.0), null)
scala> val b = Array(6)
b: Array[Int] = Array(6)
scala> a.zip(b)
res7: Array[(Array[Float], Int)] = Array((Array(1.0, 2.0, 3.0, 4.0, 5.0),6))
--》基本集合類List
scala> val numbers = List(1,2,3,4)
numbers: List[Int] = List(1, 2, 3, 4)
--》函數組合器,map將一個集合映射map到另外一個集合
--》string類型轉換爲Float類型
scala> val a ="12.23".toFloat
a: Float = 12.23
scala> numbers.map((i:Int)=>i*2)
res3: List[Int] = List(2, 4, 6, 8)
--》集合類的foreach方法用於遍歷,不改變集合的值
scala> val num = List(1,2,3,4)
num: List[Int] = List(1, 2, 3, 4)
scala> num.foreach((x:Int)=>println(x*2))
2
4
6
8
--》基本集合類Set
scala> Set(1,1,2)
res1: scala.collection.immutable.Set[Int] = Set(1, 2)
--》println
直接打印字符串,注意必須是雙引號,必須是括號
>println("hello,world")
--》println直接打印列表
scala> val a = List(1,2,3,4)
a: List[Int] = List(1, 2, 3, 4)
scala> println(a)
List(1, 2, 3, 4)
--》println間接打印數組
scala> val a= Array(1,2,3,4)
a: Array[Int] = Array(1, 2, 3, 4)
scala> println(a)
[I@79675800
scala> a.foreach((x:Int)=>println(x))
1
2
3
--》
scala> Array.range(0,4)
res8: Array[Int] = Array(0, 1, 2, 3)
--》打印亂碼
scala> val a = Array(1,2,3)
a: Array[Int] = Array(1, 2, 3)
scala> println(a)
[I@5f33f2f3
scala> a.foreach(x=>println(x))
1
2
3
注意事項,將jar和scala程序放到同一個目錄下
--》用scala調用java的庫,並調用啓動python的腳本
在Hello.scala中輸入以下程序
import java.io.BufferedReader
import java.io.InputStreamReader
object Hello{
def main(args:Array[String]){
val pr = Runtime.getRuntime().exec("python test.py")
val in = new BufferedReader(new InputStreamReader(pr.getInputStream()))
var line = in.readLine
while (line != null) {
System.out.println("line is")
System.out.println(line+2)
line = in.readLine
}
in.close()
pr.waitFor()
System.out.println("end")
println("hello,world")
}
}
創建test.py文件並複製以下數據
import sys
import matplotlib.pyplot as plt
import numpy as np
import scipy.io as sio
import argparse
import dlib
from skimage import io
def run_dlib_selective_search(image_name):
img = io.imread(image_name)
rects = []
dlib.find_candidate_object_locations(img,rects,min_size=50)
proposals = []
for k,d in enumerate(rects):
templist = [d.left(),d.top(),d.right(),d.bottom()]
proposals.append(templist)
proposals = np.array(proposals)
return proposals
if __name__ == '__main__':
obj_proposals = run_dlib_selective_search("/home/zhaodz/program/fast-rcnn/data/demo/000004.jpg")
print obj_proposals
輸入scalac Hello.scala
輸入scala Hello
--》用Scala讀入文件
import scala.io.Source
val lines = Source.fromFile("/home/zhaodz/tmp/dd.txt")
--》讀取文件(使用了java的函數)
import java.io.BufferedReader;
import java.io.FileReader;
object Hello{
def main(args:Array[String]){
var fr=new FileReader("dd.txt")
var br = new BufferedReader(fr)
var s = br.readLine()
while(s!=null){
println(s)
s = br.readLine()
}
}
}
--》替換(接上面程序)
var ss = s.replace("1","2") //將1替換爲2,若2改成"",則表示刪除1這個字符串
println(ss)
--》定義一個List
scala> val nums = List(1,2,3,4,5)
scala> nums.slice(2,4)
res20: List[Int] = List(3, 4)
--》定義一個空的List
var result = List[Int]()
--》在List前面增長一個數
scala> val when = "AM" :: "PM" :: List()
when: List[String] = List(AM, PM)
scala> val when = "AM" :: "PM" ::days
when: List[String] = List(AM, PM, Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday)
--》在List後面增長一個數
scala> result.::(2)
res24: List[Int] = List(2)
注意有. 不然報錯
--》定義迭代器
scala> val a = Iterator("baidu","google","sougou")
a: Iterator[String] = non-empty iterator
--》打印迭代器
scala> while(a.hasNext){println(a.next())}
baidu
google
sougou
--》列表轉化爲迭代器
scala> val a = List(1,2,3)
a: List[Int] = List(1, 2, 3)
scala> val b = a.iterator
b: Iterator[Int] = non-empty iterator
scala> while(b.hasNext){println(b.next())}
1
2
3
--》隨機數
scala> import scala.util.Random
scala> val a = new Random()
scala> a.nextInt(20)//0-19 包括19
res10: Int = 14
-->映射
--》構建映射
scala> val scores = Map("Alice"->10,"Blob"->3,"Cindy"->8)
scores: scala.collection.immutable.Map[String,Int] = Map(Alice -> 10, Blob -> 3, Cindy -> 8)
--》獲取映射中的值
scala> scores("Blob")
res30: Int = 3
也能夠用java的代碼
scala> scores.get("Blob")
res31: Option[Int] = Some(3)