1. 程式人生 > >Breeze常用函式

Breeze常用函式

下面列舉了三個不同庫,相同功能的函式列表:

 

示例程式碼如下:

package sparkMlibDemo.breeze


import breeze.linalg._
import breeze.numerics._
import breeze.stats.distributions.Rand

/**
* Created by fishjar on 2018/9/9.
*/
object BreezeOperate {

def main(args: Array[String]): Unit = {
//1.1)建立一個 2 x 3的矩陣
val m1 = DenseMatrix.zeros[Double](2,3)
println(m1)
val m2 = DenseMatrix.ones[Double](2,3)
println(m2)

//1.2) 建立一個向量
//1.2.1)建立一個全 0 向量
val v1 = DenseVector.zeros[Double](3)
println(v1)
//1.2.2)建立一個全 1 向量
val v2 = DenseVector.ones[Double](3)
println(v2)
//1.2.3) 根據陣列填充向量
val v3 = DenseVector.fill(3){2.0}
println(v3)
// 列印結果:DenseVector(2.0, 2.0, 2.0)
//1.2.4) 根據間隔生成 向量
val v4 = DenseVector.range(1,10,2)
println(v4)
// 列印結果:DenseVector(1, 3, 5, 7, 9)

//1.2.5) 建立單位矩陣
val m3 = DenseMatrix.eye[Double](3)
println(m3)
//列印結果:
// 1.0 0.0 0.0
// 0.0 1.0 0.0
// 0.0 0.0 1.0

//1.2.6) 建立對角矩陣
println("*******建立對角矩陣*******")
val m4=diag(DenseVector(3.0, 4.0 , 5.0))
println(m4)

//1.2.7)指定值建立向量
val v8 = DenseVector(1,2,3,4)
println(v8)

//1.2.8)將行矩陣 轉 為 列 向量
println("*****列****")
val v9 = DenseVector(1,2,3,4).t
println(v9)

//1.2.9) 根據下標 建立 向量
println("*********根據下標 建立 向量**********")
val v10 = DenseVector.tabulate(3){i => i +10}
println(v10)

//1.2.10)根據下標 建立 矩陣
val v11 = DenseMatrix.tabulate(3,2){case(i,j) => i+j}
println("******v11")
println(v11)

//1.2.11) 根據陣列 建立 向量
println("*********根據陣列 建立 向量**********")
val v12 = DenseVector(Array(1,2,3,4))
println(v12)

//1.2.12) 根據陣列 建立 矩陣
println("************根據陣列 建立 矩陣************")
val v13 = new DenseMatrix(2,3,Array(1,2,3,4,5,6))
println(v13)

//1.2.13 建立隨機數向量
println("********建立隨機數向量*******")
val v14 = DenseVector.rand(6)
println(v14)

//1.2.14 建立隨機 矩陣
println("********建立隨機 矩陣******")
val v15 = DenseMatrix.rand(2,3)
println(v15)

//1.2.15 向量 訪問
println("**********向量 訪問**********")
val v16 = DenseVector(1,2,3,4,5,6,7,8,9,10)
//1.2.15.1 取第三個元素
println(v16(2))
//1.2.15.2 取 下標為1 到 下標為3的三個元素
println(v16(1 to 3))
//1.2.15.3 取下標5 到 下標 0 的元素
println(v16(5 to 0 by -1))
// 輸出結果為:DenseVector(6, 5, 4, 3, 2, 1)
println(v16(5 to 0 by -2))
// 輸出結果為:DenseVector(6, 4, 2)

//1.2.16 矩陣 訪問
println("************矩陣 訪問**************")
val v17 = DenseMatrix((1.0,2.0,3.0),(3.0,4.0,5.0))
println(v17(1,1))
//返回向量
//列印結果為:DenseVector(2.0, 4.0)
println(v17(::,1))
// 列印結果為:1.0 2.0 3.0
println(v17(0,::))

//2.1 矩陣 元素 操作
println("********* 矩陣 元素 操作************")
//2.1.1 矩陣 轉換 按照列 來轉換 元素
val m5 = DenseMatrix((1,2,3),(4,5,6))
println(m5)
println(m5.reshape(3,2))

//2.1.2 將矩陣 轉換 為向量
println("******將矩陣 轉換 為向量*********")
val m6 = DenseMatrix((1,2,3),(4,5,6))
println(m6.toDenseVector)

//2.1.3 取矩陣的 下 三角
println("*********取矩陣的 下 三角***********")
val m7 = DenseMatrix((1,2,3),(4,5,6),(7,8,9))
println(lowerTriangular(m7))

//2.1.4 取矩陣的 上 三角
println("***********取矩陣的 上 三角***********")
val m8 = DenseMatrix((1,2,3),(4,5,6),(7,8,9))
println(upperTriangular(m8))

//2.1.5 複製 矩陣
println("********複製 矩陣*******")
val m9 = DenseMatrix((1,2,3),(4,5,6),(7,8,9))
val m9_1 = m9.copy
println(m9_1)

//2.1.6 對角 矩陣 ,返回 向量
println("*******對角 矩陣*******")
val m10 =DenseMatrix((1,2,3),(4,5,6),(7,8,9))
println(diag(m10))

//2.1.7 對矩陣位子上的所有元素進行賦值
println("********對矩陣位子上的所有元素進行賦值*******")
val m11 =DenseMatrix((1,2,3),(4,5,6),(7,8,9))
println("將第一列值賦值")
m11(::,0):=8
println(m11)

println("將第一行到第二行與 第一列賦值 ")
val m11_1 =DenseMatrix((1,2,3),(4,5,6),(7,8,9))
m11_1(0 to 1,0 ) :=7
println(m11_1)

//2.1.8 給向量賦值:
println("")
val v20 = DenseVector(1,2,3,4,5,6,7,8,9,10)
v20(1 to 4):=5
//列印結果:DenseVector(1, 5, 5, 5, 5, 6, 7, 8, 9, 10)
println(v20)
v20(1 to 5) := DenseVector(10,11,12,13,14)
println(v20)

//2.1.9 矩陣垂直 相連
println("向量 垂直相連")
val v21 = DenseMatrix((1.0,2.0,3.0),(4.0,5.0,6.0))
val v21_2 = DenseMatrix((1.0,1.0,1.0),(2.0,2.0,2.0))
val v21_3 =DenseMatrix.vertcat(v21,v21_2)
println(v21_3)

//2.1.10 矩陣 橫向 連線
println("向量 橫向相連")
val v22 = DenseMatrix((1.0,2.0,3.0),(4.0,5.0,6.0))
val v22_2 = DenseMatrix((1.0,1.0,1.0),(2.0,2.0,2.0))
val v22_3 =DenseMatrix.horzcat(v21,v21_2)
println(v22_3)

//2.1.11 向量連線
// println("向量連線 垂直連線")
val v23 = DenseVector(1,2,3,4)
val v23_2 = DenseVector(6,7,8)
val v23_3 = DenseVector.vertcat(v23,v23_2)
println(v23_3)

//3.1 數值計算
//3.1.1 矩陣 加法 運算
val v31 =DenseMatrix((1.0,2.0,3.0),(4.0,5.0,6.0))
val v31_2 = DenseMatrix((5.0,6.0,7.0),(5.0,6.0,7.0))
val v31_3 = v31 + v31_2;
println(v31_3)

//3.1.2 矩陣 乘法 運算
println("矩陣 乘法 運算")
val v32 =DenseMatrix((1.0,2.0,3.0),(4.0,5.0,6.0))
val v32_2 = DenseMatrix((5.0,6.0,7.0),(5.0,6.0,7.0))
val v32_3 = v32 :* v32_2
println(v32_3)

//3.1.3 矩陣 除法 運算
println("矩陣 除法 運算")
val v33 =DenseMatrix((1.0,2.0,3.0),(4.0,5.0,6.0))
val v33_2 = DenseMatrix((5.0,6.0,7.0),(5.0,6.0,7.0))
val v33_3 = v33 :/ v33_2
println(v33_3)

//3.1.4 矩陣 比較 運算
println("**************矩陣 比較 運算")
val v34 =DenseMatrix((1.0,2.0,3.0),(4.0,5.0,6.0))
val v34_2 = DenseMatrix((5.0,6.0,7.0),(5.0,3.0,7.0))
println(v34 :< v34_2)

//3.1.5 元素 相等 判斷
println("************元素 相等 判斷")
val v35 =DenseMatrix((1.0,2.0,3.0),(4.0,5.0,6.0))
val v35_2 = DenseMatrix((5.0,6.0,7.0),(5.0,3.0,6.0))
println(v35 :==v35_2)

//3.1.6 元素 追加
println("**********3.1.5 元素 追加")
val v36 = DenseMatrix((1.0,2.0,3.0),(4.0,5.0,6.0))
println(v36 :+= 1.0 )
// 結果輸出為:
// 2.0 3.0 4.0
// 5.0 6.0 7.0

//3.1.7 元素追乘
println("************3.1.6 元素追乘")
val v37 =DenseMatrix((1.0,2.0,3.0),(4.0,5.0,6.0))
println( v37 :*= 2.0)

//3.1.8 向量點積 運算
println("***********3.1.8 向量點積 運算")
val v38 = DenseVector(1,2,3,4)
val v38_2 = DenseVector(2,2,2,1)
println(v38 dot v38_2)

//3.1.9 元素最大值
println("**************元素最大值")
import breeze.linalg._
val v39 = DenseMatrix((1.0,2.0,3.0),(4.0,5.0,6.0))
println(max(v39))

//3.1.10 元素最大值 及 位置
println("*************元素最大值 及 位置")
val v40 =DenseMatrix((1.0,2.0,3.0),(4.0,5.0,6.0))
println(argmax(v40))
println(argmin(v40))

//3.1.11 元素 求和
println("**************元素 求和")
val v41 =DenseMatrix((1.0,2.0,3.0),(4.0,5.0,6.0))
val v41_2 =DenseVector(1.0,2.0,3.0,4.0,5.0,6.0,7.0)
println(sum(v41))
println(sum(v41_2))

//3.1.12 每一列求和
println("**************每一列求和")
val v42 =DenseMatrix((1.0,2.0,3.0),(4.0,5.0,6.0))
println(sum(v42, Axis._0) )

//3.1.13 每一行 求和
println("************每一行 求和")
val v43 =DenseMatrix((1.0,2.0,3.0),(4.0,5.0,6.0))
println(sum(v43, Axis._1) )

//3.1.14 對角線元素 求和
println("************對角線元素 求和")
val v44 =DenseMatrix((1.0,2.0,3.0),(4.0,5.0,6.0),(7.0,8.0,9.0))
println(trace(v44))

//3.1.15 累積和
println("*************累積和")
val v45_2 = DenseVector(1,2,3,4)
println(accumulate(v45_2))
// 輸出結果:DenseVector(1, 3, 6, 10)

//4.1 布林函式
//4.1.1 元素 與 操作
println("**************元素 與 操作")
val v46 = DenseVector(true, false, true)
val v46_2 =DenseVector(false, true, true)
println(v46 :& v46_2)
// 輸出結果:DenseVector(false, false, true)

//4.1.2 元素 或 操作
println("**************元素 或 操作")
val v47 = DenseVector(true, false, true)
val v47_2 =DenseVector(false, true, true)
println(v47 :| v47_2)

//4.1.3 元素 非 操作
println("*********元素非操作")
val v48 = DenseVector(true, false, true)
println( !v48)

//4.1.4 任意元素 非 0
println("************任意元素 非 0")
val v49 = DenseVector(1.0, 0.0, -2.0)
println(any(v49))

//4.1.5 所有元素 非 0
println("************任意元素 非 0")
val v50 = DenseVector(1.0, 0.0, -2.0)
println(all(v50))

// 5.1 線性代數 函式
// 5.1.1 線性求解
println("**************5.1.1 線性求解")
val v51 =DenseMatrix((1.0,2.0,3.0), (4.0,5.0,6.0) , (7.0,8.0,9.0))
val v51_1 = DenseMatrix((1.0,1.0,1.0), (1.0,1.0,1.0) , (1.0,1.0,1.0))
println(v51 \ v51_1)

//5.1.2 轉置
println("***************轉置")
val v52 =DenseMatrix((1.0,2.0,3.0), (4.0,5.0,6.0) , (7.0,8.0,9.0),(10.0,11.0,12.0))
println(v52)
println(v52.t)

//5.1.3 求特徵值
println("************求特徵值")
val v53 =DenseMatrix((1.0,2.0,3.0), (4.0,5.0,6.0) , (7.0,8.0,9.0))
val v53_2 =DenseMatrix((1.0,1.0,3.0,1.0), (4.0,2.0,6.0,7.0) , (7.0,8.0,9.0,10.0),(8.0,9.0,10.0,11.0))
println(det(v53))
println(det(v53_2))

//5.1.4 求逆
println("************求逆")
val v54=DenseMatrix((1.0,2.0,3.0), (4.0,5.0,6.0) , (7.0,8.0,9.0))
println(inv(v54))

//5.1.5 求偽逆
println("************求偽逆")
val v55 = DenseMatrix((1.0,2.0,3.0), (4.0,5.0,6.0) , (7.0,8.0,9.0))
println(pinv(v55))

//5.1.6 求範數
// println("************求範數")
// val v56 = DenseMatrix((1.0,2.0,3.0), (4.0,5.0,6.0) , (7.0,8.0,9.0))
// println(norm(1.0,20.0))

}
}