日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

spark向量矩阵的使用(scala)

發布時間:2024/1/17 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 spark向量矩阵的使用(scala) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

向量和矩陣都是做機器學習的基礎,下面來介紹下使用
spark的底層的向量和矩陣是基于Breeze的,下面主要介紹下Breeze的使用,下面直接給代碼,代碼上有注釋
需要引入的包

import breeze.linalg._ import breeze.numerics._ import org.apache.log4j.{Level, Logger} import org.apache.spark.{SparkConf, SparkContext}

Breeze 創建函數

val conf = new SparkConf().setAppName("breezeTest").setMaster("local[3]")val sc = new SparkContext(conf)Logger.getRootLogger.setLevel(Level.WARN)//3.1.1 Breeze 創建函數//創建0矩陣和向量val m1 = DenseMatrix.zeros[Double](2,3)val v1 = DenseVector.zeros[Double](3)//創建元素都是1的向量val v2 = DenseVector.ones[Double](3)//創建指定元素的向量val v3 = DenseVector.fill(3)(5.0)//根據范圍創建向量參數(start,end,step)val v4 = DenseVector.range(1,10,2)//創建對角線為1的矩陣val m2 = DenseMatrix.eye[Double](3)//創建指定對角線元素的矩陣val v6 = diag(DenseVector(1.0,2.0,3.0))//根據向量創建矩陣,每個數組就是一行val m3 = DenseMatrix((1.0,2.0),(3.0,4.0))//根據元素創建向量val v8 = DenseVector(1,2,3,4)//val v9 = v8.t//轉置val v9 = DenseVector(1,2,3,4).t//根據下標創建向量和矩陣val v10 = DenseVector.tabulate(3){i=>2*i}val m4 = DenseMatrix.tabulate(3,2){case(i,j) =>i+j}//根據數組創建向量和矩陣val v11 = new DenseVector(Array(1,2,3,4))val m5 = new DenseMatrix(2,3,Array(11,12,12,21,21,11))//創建一個隨機向量和矩陣val v12 = DenseVector.rand(4)val m6 = DenseMatrix.rand(2,3)

Breeze 元素訪問

//元素訪問val a = DenseVector(1,2,3,4,5,6,7,8,9)//訪問指定的元素a(0)//訪問子元素,返回還是一個向量a(1 to 4)//指定起始和終止位置,和補償a(5 to 1 by -1)//-1 代表最后的元素a(1 to -1)//訪問最后元素a(-1)val m = DenseMatrix((1.0,2.0,3.0),(4.0,5.0,6.0))//訪問指定的元素m(0,1)//訪問某列的元素,返回一個向量m(::,1)//訪問某一行m(1,::)//元素操作val m_1 = DenseMatrix((1.0,2.0,3.0),(4.0,5.0,6.0))//變成3行2列的矩陣m_1.reshape(3,2)//生成一個向量m_1.toDenseVectorval m_3 = DenseMatrix((1,2,3),(4,5,6),(7,8,9))//取上三角和下三角lowerTriangular(m_3)upperTriangular(m_3)//copy生成一個新的矩陣m_3.copy//對角線生成一個向量diag(m_3)//改變矩陣里面的元素m_3(::,2) := 5m_3m_3(1 to 2,1 to 2) := 5m_3//改變向量里面的元素val a_1 = DenseVector(1,2,3,4,5,6,7,8,9,10)a_1(1 to 4) := 5a_1a_1(1 to 4) := DenseVector(1,2,3,4)a_1//矩陣的連接和向量的連接val a1 = DenseMatrix((1,2,3),(4,5,6))val a2 = DenseMatrix((1,1,1),(2,2,2))//豎直的連接DenseMatrix.vertcat(a1,a2)//水平連接DenseMatrix.horzcat(a1,a2)val b1 = DenseVector(1,2,3,4)val b2 = DenseVector(1,1,1,1)//水平連接DenseVector.vertcat(b1,b2)//兩列的形式連接DenseVector.horzcat(b1,b2)

Breeze 數值計算函數

val a_3 = DenseMatrix((1,2,3),(4,5,6))val b_3 = DenseMatrix((1,1,1),(2,2,2))//對應元素相操作a_3 + b_3a_3 :* b_3a_3 :/ b_3a_3 :< b_3a_3 :== b_3a_3 :+= 1a_3 :*= 2max(a_3)//最大值位置的索引argmax(a_3)//內積DenseVector(1,2,3,4) dot DenseVector(1,1,1,1)

Breeze 求和函數

val a_4 = DenseMatrix((1,2,3),(4,5,6),(7,8,9))sum(a_4)//每一列進行求和 12 15 18sum(a_4,Axis._0)//每一行進行求和 DenseVector(6, 15,24)sum(a_4,Axis._1)//對角線求和trace(a_4)//把前面的元素相加 DenseVector(1, 3, 6, 10)accumulate(DenseVector(1,2,3,4))

Breeze 布爾函數

val a_5 = DenseVector(true,false,true)val b_5 = DenseVector(false,true,true)a_5 :& b_5a_5 :| b_5!a_5val a_5_2 = DenseVector(1,0,-2)//任意一個元素為0即為trueany(a_5_2)//所有元素都為0則為trueall(a_5_2)

Breeze 線性代數函數

val a_6 = DenseMatrix((1,2,3),(4,5,6),(7,8,9))val b_6 = DenseMatrix((1,1,1),(1,1,1),(1,1,1))a_6 \ b_6//轉置a_6.t//特征值det(a_6)//逆inv(a_6)//矩陣分解(有問題)val svd.SVD(u,s,v) = svd(DenseMatrix(1.1,2.0),(2.0,3.0))a_6.rowsa_6.cols

Breeze 取整函數

val a_7 = DenseVector(1.2,0.6,-2.3)//四舍五入round(a_7)//往前進位ceil(a_7)//都舍去floor(a_7)//正的變為1.0 負的變為-1 0還是0signum(a_7)//絕對值abs(a_7)

--------------------- 本文來自 韓利鵬 的CSDN 博客 ,全文地址請點擊:https://blog.csdn.net/HANLIPENGHANLIPENG/article/details/70139010?utm_source=copy

總結

以上是生活随笔為你收集整理的spark向量矩阵的使用(scala)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。