Spark 机器学习中的线性代数库

文章目录

    • 1. DenseVector、SparseVector
    • 2. DenseMatrix
    • 3. SparseMatrix
    • 4. Vector 运算
    • 5. 矩阵运算
    • 6. RowMatrix
    • 7. IndexedRowMatrix
    • 8. CoordinateMatrix
    • 9. BlockMatrix
    • 完整代码
      • pom.xml

学自:Spark机器学习实战
https://book.douban.com/subject/35280412/

环境:win 10 + java 1.8.0_281 + Scala 2.11.11 + Hadoop 2.7.7 + Spark2.4.7

1. DenseVector、SparseVector

		// 通过数组来创建 DenseVectorval CustomerFeatures1: Array[Double] = Array(1, 3, 5, 7, 9, 1, 3, 2, 4, 5, 6, 1, 2, 5, 3, 7, 4, 3, 4, 1)val x = Vectors.dense(CustomerFeatures1)println(x) // [1.0,3.0,5.0,7.0,9.0,1.0,3.0,2.0,4.0,5.0,6.0,1.0,2.0,5.0,3.0,7.0,4.0,3.0,4.0,1.0]// 通过字符串转化为 doubleval y = Vectors.dense("24".toDouble, "8".toDouble, "001".toDouble)println(y) // [24.0,8.0,1.0]// 创建 SparseVector稀疏向量, 下面进行对比两种Vectorval denseVec1 = Vectors.dense(5, 0, 3, 0, 0, 0, 7, 8)println(denseVec1.size) // 8println(denseVec1.numActives) // 8println(denseVec1.numNonzeros) // 4println(denseVec1) // [5.0,0.0,3.0,0.0,0.0,0.0,7.0,8.0]val sparseVec1 = Vectors.sparse(8, Array(0, 2, 6, 7), Array(5, 3, 7, 8))println(sparseVec1.size) // 8println(sparseVec1.numActives) // 4println(sparseVec1.numNonzeros) // 4println(sparseVec1) // (8,[0,2,6,7],[5.0,3.0,7.0,8.0]), size, idx, values// 稀疏向量仅存储 非零元素的 位置 和 值//相互转换val ConvertedDenseVector = sparseVec1.toDenseprintln(ConvertedDenseVector) // [5.0,0.0,3.0,0.0,0.0,0.0,7.0,8.0]val ConvertedSparseVector = denseVec1.toSparseprintln(ConvertedSparseVector) // (8,[0,2,6,7],[5.0,3.0,7.0,8.0])// 注意 : DenseVector, SparseVector 都是本地的 Vector, 不是分布式的

2. DenseMatrix

// 本地的 DenseMatrixval MyArr1 = Array(10, 11, 20, 30.3, 24, 8)val denseMat1 = Matrices.dense(2, 3, MyArr1) // 行、 列、 valuesprintln(denseMat1)// 10.0  20.0  24.0// 11.0  30.3  8.0// 也可以使用 内联的方式val denseMat2 = Matrices.dense(3, 2, Array(1, 2, 3, 4, 5, 6))println(denseMat2)// 1.0  4.0// 2.0  5.0// 3.0  6.0// 使用 多个 vector 内联方式创建 Matrixval v1 = Vectors.dense(1, 2, 3, 4)val v2 = Vectors.dense(5, 6, 7, 8)val v3 = Vectors.dense(9, 10, 11, 12)val Mat1 = Matrices.dense(4, 3, v1.toArray ++ v2.toArray ++ v3.toArray)println(Mat1)// 1.0  5.0  9.0// 2.0  6.0  10.0// 3.0  7.0  11.0// 4.0  8.0  12.0// 记住 : Spark 内部使用 列优先 存储机制,性能更好

3. SparseMatrix

// 本地 SparseMatrixval sparseMat1 = Matrices.sparse(3, 2, Array(0, 1, 3), Array(0, 1, 2), Array(11, 22, 33))// 参数顺序 : 行,列,每列的元素个数的前缀和(上面例子表示的两列各有1-0,3-1个元素)、行索引、实际值// 参考图片理解:https://www.cnblogs.com/zhangbojiangfeng/p/7456961.htmlprintln(sparseMat1.numRows) // 3println(sparseMat1.numCols) // 2println(sparseMat1.numActives) // 3println(sparseMat1.numNonzeros) // 3println(sparseMat1)// 3 x 2 CSCMatrix// (0,0) 11.0// (1,1) 22.0// (2,1) 33.0

4. Vector 运算

// Vector 运算, spark 2.0 缺少vector运算支持,需要先转成 breezeVectorval w1 = Vectors.dense(1,2,3)val w2 = Vectors.dense(4,-5,6)// 将 Spark 支持的 Vector 转换为 Breeze库所支持的Vector,可以使用丰富的库API操作val w3 = new BreezeVector(w1.toArray)val w4 = new BreezeVector(w2.toArray)println(w3+w4) // DenseVector(5.0, -3.0, 9.0)println(w3-w4) // DenseVector(-3.0, 7.0, -3.0)println(w3.dot(w4)) // 12.0val sv1 = Vectors.sparse(10, Array(0,2,9), Array(5,3,13))val sv2 = Vectors.dense(1,0,1,1,0,0,1,0,0,13)println(sv1)println(sv2)println(new BreezeVector(sv1.toArray).dot(new BreezeVector(sv2.toArray)))

5. 矩阵运算

// spark 支持 SparseMatrix 和 DenseMatrix 运算,不需要转成 Breeze 库中相应类型// 创建 Matrix, 矩阵和向量相乘val sparseMat2 = Matrices.sparse(3,3,Array(0,2,3,6), Array(0,2,1,0,1,2),Array(1,2,3,4,5,6))val denseFeatureVector = Vectors.dense(1,2,1)val ans0 = sparseMat2.multiply(denseFeatureVector)println(ans0) // 稀疏矩阵可以和稠密矩阵相互转换  [5.0,11.0,8.0]val denseVec3 = Vectors.dense(5,3,0)val denseMat3 = Matrices.dense(3,3,Array(1,0,0,0,1,0,0,0,1))println(denseMat3)println(denseVec3)println(denseMat3.multiply(denseVec3)) // [5.0,3.0,0.0]// 矩阵转置println(sparseMat2)// 3 x 3 CSCMatrix// (0,0) 1.0// (2,0) 2.0// (1,1) 3.0// (0,2) 4.0// (1,2) 5.0// (2,2) 6.0val transposeSparseMat2 = sparseMat2.transposeprintln(transposeSparseMat2)//  3 x 3 CSCMatrix// (0,0) 1.0// (2,0) 4.0// (1,1) 3.0// (2,1) 5.0// (0,2) 2.0// (2,2) 6.0// 矩阵相乘val dMat1 = new DenseMatrix(2,2,Array(1,3,2,4))val dMat2 = new DenseMatrix(2,2,Array(2,1,0,2))println(dMat1)// 1.0  2.0// 3.0  4.0println(dMat2)// 2.0  0.0// 1.0  2.0println(dMat1.multiply(dMat2))// 4.0   4.0// 10.0  8.0println(dMat2.multiply(dMat1))// 2.0  4.0// 7.0  10.0

6. RowMatrix

  • 面向行的 Matrix,缺点是 没有行索引用来追踪,它是由本地 Vector 作为行组成的
// RowMatrixval dataVectors = Seq(Vectors.dense(0, 1, 0),Vectors.dense(3, 1, 5),Vectors.dense(0, 7, 0))val identityVectors = Seq(Vectors.dense(1, 0, 0),Vectors.dense(0, 1, 0),Vectors.dense(0, 0, 1))// 获取原始序列,转成 RDDval distMat3 = new RowMatrix(spark.sparkContext.parallelize(dataVectors))println(distMat3) // org.apache.spark.mllib.linalg.distributed.RowMatrix@352ed70dprintln(distMat3.computeColumnSummaryStatistics().count) // 3println(distMat3.computeColumnSummaryStatistics().mean) // 列的属性 均值 [1.0,3.0,1.6666666666666665]println(distMat3.computeColumnSummaryStatistics().variance) // 列的方差 [3.0,12.0,8.333333333333334]println(distMat3.computeCovariance()) // 协方差// 3.0   -3.0                5.0// -3.0  12.0                -4.999999999999999// 5.0   -4.999999999999999  8.333333333333334val dd = identityVectors.map(x => x.toArray).flatten.toArraydd.foreach(println)val dmIdentity = Matrices.dense(3,3,dd)println(dmIdentity) // 本地矩阵// 1.0  0.0  0.0// 0.0  1.0  0.0// 0.0  0.0  1.0// 分布式矩阵 * 本地矩阵 得到 一个新的分布式矩阵// 应用:通过乘以 一个细长、竖直 或者 狭长的矩阵,实现数据量的降低和结果的维度约减val distMat4 = distMat3.multiply(dmIdentity)println(distMat4) // org.apache.spark.mllib.linalg.distributed.RowMatrix@205df5dcprintln(distMat4.computeColumnSummaryStatistics().count) // 3println(distMat4.computeColumnSummaryStatistics().mean)println(distMat4.computeColumnSummaryStatistics().variance)println(distMat4.computeCovariance())

7. IndexedRowMatrix

  • 可以携带 索引 和 数据行 RDD,可以随机访问,定位数据
// IndexedRowMatrixval distIdxMat1 = spark.sparkContext.parallelize(List(IndexedRow(0L, dataVectors.head),IndexedRow(1L, dataVectors(1)), IndexedRow(1L, dataVectors(2))))distIdxMat1.foreach(println)// IndexedRow(0,[0.0,1.0,0.0])  index , RDD row// IndexedRow(1,[3.0,1.0,5.0])// IndexedRow(1,[0.0,7.0,0.0])println("distinct elements=", distIdxMat1.distinct().count()) // 3

8. CoordinateMatrix

  • 涉及大量 3D 坐标系统数据时,这个形式的矩阵非常有用
// CoordinateMatrixval CoordinateEntries = Seq(MatrixEntry(1, 6, 300.0), // 对应坐标,x,y类型必须 long,  z doubleMatrixEntry(3, 1, 5),MatrixEntry(1, 7, 10))val distCordMat1 = new CoordinateMatrix(spark.sparkContext.parallelize(CoordinateEntries.toList))println("First Row (MarixEntry) =",distCordMat1.entries.first())// (First Row (MarixEntry) =,MatrixEntry(1,6,300.0))

9. BlockMatrix

// BlockMatrixval distBlkMat1 =  distCordMat1.toBlockMatrix().cache()distBlkMat1.validate()// Validates the block matrix info against the matrix data (blocks)// and throws an exception if any error is found.println("Is block empty =", distBlkMat1.blocks.isEmpty())// (Is block empty =,false)

完整代码

package spark.ml.cookbook.chapter2import breeze.linalg.{DenseVector => BreezeVector}
import org.apache.log4j.{Level, Logger}
import org.apache.spark.mllib.linalg.distributed.{CoordinateMatrix, IndexedRow, MatrixEntry, RowMatrix}
import org.apache.spark.mllib.linalg.{DenseMatrix, Matrices, Vectors}
import org.apache.spark.sql.SparkSessionobject MyVectorMatrix {def main(args: Array[String]): Unit = {Logger.getLogger("org").setLevel(Level.ERROR)Logger.getLogger("akka").setLevel(Level.ERROR)val spark = SparkSession.builder.master("local[*]").appName("MyVectorMatrix").config("spark.sql.warehouse.dir", ".").config("spark.io.compression.codec", "snappy").getOrCreate()// 通过数组来创建 DenseVectorval CustomerFeatures1: Array[Double] = Array(1, 3, 5, 7, 9, 1, 3, 2, 4, 5, 6, 1, 2, 5, 3, 7, 4, 3, 4, 1)val x = Vectors.dense(CustomerFeatures1)println(x) // [1.0,3.0,5.0,7.0,9.0,1.0,3.0,2.0,4.0,5.0,6.0,1.0,2.0,5.0,3.0,7.0,4.0,3.0,4.0,1.0]// 通过字符串转化为 doubleval y = Vectors.dense("24".toDouble, "8".toDouble, "001".toDouble)println(y) // [24.0,8.0,1.0]// 创建 SparseVector稀疏向量, 下面进行对比两种Vectorval denseVec1 = Vectors.dense(5, 0, 3, 0, 0, 0, 7, 8)println(denseVec1.size) // 8println(denseVec1.numActives) // 8println(denseVec1.numNonzeros) // 4println(denseVec1) // [5.0,0.0,3.0,0.0,0.0,0.0,7.0,8.0]val sparseVec1 = Vectors.sparse(8, Array(0, 2, 6, 7), Array(5, 3, 7, 8))println(sparseVec1.size) // 8println(sparseVec1.numActives) // 4println(sparseVec1.numNonzeros) // 4println(sparseVec1) // (8,[0,2,6,7],[5.0,3.0,7.0,8.0]), size, idx, values// 稀疏向量仅存储 非零元素的 位置 和 值//相互转换val ConvertedDenseVector = sparseVec1.toDenseprintln(ConvertedDenseVector) // [5.0,0.0,3.0,0.0,0.0,0.0,7.0,8.0]val ConvertedSparseVector = denseVec1.toSparseprintln(ConvertedSparseVector) // (8,[0,2,6,7],[5.0,3.0,7.0,8.0])// 注意 : DenseVector, SparseVector 都是本地的 Vector, 不是分布式的// 本地的 DenseMatrixval MyArr1 = Array(10, 11, 20, 30.3, 24, 8)val denseMat1 = Matrices.dense(2, 3, MyArr1) // 行、 列、 valuesprintln(denseMat1)// 10.0  20.0  24.0// 11.0  30.3  8.0// 也可以使用 内联的方式val denseMat2 = Matrices.dense(3, 2, Array(1, 2, 3, 4, 5, 6))println(denseMat2)// 1.0  4.0// 2.0  5.0// 3.0  6.0// 使用 多个 vector 内联方式创建 Matrixval v1 = Vectors.dense(1, 2, 3, 4)val v2 = Vectors.dense(5, 6, 7, 8)val v3 = Vectors.dense(9, 10, 11, 12)val Mat1 = Matrices.dense(4, 3, v1.toArray ++ v2.toArray ++ v3.toArray)println(Mat1)// 1.0  5.0  9.0// 2.0  6.0  10.0// 3.0  7.0  11.0// 4.0  8.0  12.0// 记住 : Spark 内部使用 列优先 存储机制,性能更好// 本地 SparseMatrixval sparseMat1 = Matrices.sparse(3, 2, Array(0, 1, 3), Array(0, 1, 2), Array(11, 22, 33))// 参数顺序 : 行,列,每列的元素个数的前缀和(上面例子表示的两列各有1-0,3-1个元素)、行索引、实际值// 参考图片理解:https://www.cnblogs.com/zhangbojiangfeng/p/7456961.htmlprintln(sparseMat1.numRows) // 3println(sparseMat1.numCols) // 2println(sparseMat1.numActives) // 3println(sparseMat1.numNonzeros) // 3println(sparseMat1)// 3 x 2 CSCMatrix// (0,0) 11.0// (1,1) 22.0// (2,1) 33.0// Vector 运算, spark 2.0 缺少vector运算支持,需要先转成 breezeVectorval w1 = Vectors.dense(1, 2, 3)val w2 = Vectors.dense(4, -5, 6)// 将 Spark 支持的 Vector 转换为 Breeze库所支持的Vector,可以使用丰富的库API操作val w3 = new BreezeVector(w1.toArray)val w4 = new BreezeVector(w2.toArray)println(w3 + w4) // DenseVector(5.0, -3.0, 9.0)println(w3 - w4) // DenseVector(-3.0, 7.0, -3.0)println(w3.dot(w4)) // 12.0val sv1 = Vectors.sparse(10, Array(0, 2, 9), Array(5, 3, 13))val sv2 = Vectors.dense(1, 0, 1, 1, 0, 0, 1, 0, 0, 13)println(sv1)println(sv2)println(new BreezeVector(sv1.toArray).dot(new BreezeVector(sv2.toArray)))// spark 支持 SparseMatrix 和 DenseMatrix 运算,不需要转成 Breeze 库中相应类型// 创建 Matrix, 矩阵和向量相乘val sparseMat2 = Matrices.sparse(3, 3, Array(0, 2, 3, 6), Array(0, 2, 1, 0, 1, 2), Array(1, 2, 3, 4, 5, 6))val denseFeatureVector = Vectors.dense(1, 2, 1)val ans0 = sparseMat2.multiply(denseFeatureVector)println(ans0) // 稀疏矩阵可以和稠密矩阵相互转换  [5.0,11.0,8.0]val denseVec3 = Vectors.dense(5, 3, 0)val denseMat3 = Matrices.dense(3, 3, Array(1, 0, 0, 0, 1, 0, 0, 0, 1))println(denseMat3)println(denseVec3)println(denseMat3.multiply(denseVec3)) // [5.0,3.0,0.0]// 矩阵转置println(sparseMat2)// 3 x 3 CSCMatrix// (0,0) 1.0// (2,0) 2.0// (1,1) 3.0// (0,2) 4.0// (1,2) 5.0// (2,2) 6.0val transposeSparseMat2 = sparseMat2.transposeprintln(transposeSparseMat2)//  3 x 3 CSCMatrix// (0,0) 1.0// (2,0) 4.0// (1,1) 3.0// (2,1) 5.0// (0,2) 2.0// (2,2) 6.0// 矩阵相乘val dMat1 = new DenseMatrix(2, 2, Array(1, 3, 2, 4))val dMat2 = new DenseMatrix(2, 2, Array(2, 1, 0, 2))println(dMat1)// 1.0  2.0// 3.0  4.0println(dMat2)// 2.0  0.0// 1.0  2.0println(dMat1.multiply(dMat2))// 4.0   4.0// 10.0  8.0println(dMat2.multiply(dMat1))// 2.0  4.0// 7.0  10.0// RowMatrixval dataVectors = Seq(Vectors.dense(0, 1, 0),Vectors.dense(3, 1, 5),Vectors.dense(0, 7, 0))val identityVectors = Seq(Vectors.dense(1, 0, 0),Vectors.dense(0, 1, 0),Vectors.dense(0, 0, 1))// 获取原始序列,转成 RDDval distMat3 = new RowMatrix(spark.sparkContext.parallelize(dataVectors))println(distMat3) // org.apache.spark.mllib.linalg.distributed.RowMatrix@352ed70dprintln(distMat3.computeColumnSummaryStatistics().count) // 3println(distMat3.computeColumnSummaryStatistics().mean) // 列的属性 均值 [1.0,3.0,1.6666666666666665]println(distMat3.computeColumnSummaryStatistics().variance) // 列的方差 [3.0,12.0,8.333333333333334]println(distMat3.computeCovariance()) // 协方差// 3.0   -3.0                5.0// -3.0  12.0                -4.999999999999999// 5.0   -4.999999999999999  8.333333333333334val dd = identityVectors.flatMap(x => x.toArray).toArraydd.foreach(println)val dmIdentity = Matrices.dense(3,3,dd)println(dmIdentity) // 本地矩阵// 1.0  0.0  0.0// 0.0  1.0  0.0// 0.0  0.0  1.0// 分布式矩阵 * 本地矩阵 得到 一个新的分布式矩阵// 应用:通过乘以 一个细长、竖直 或者 狭长的矩阵,实现数据量的降低和结果的维度约减val distMat4 = distMat3.multiply(dmIdentity)println(distMat4) // org.apache.spark.mllib.linalg.distributed.RowMatrix@205df5dcprintln(distMat4.computeColumnSummaryStatistics().count) // 3println(distMat4.computeColumnSummaryStatistics().mean)println(distMat4.computeColumnSummaryStatistics().variance)println(distMat4.computeCovariance())// IndexedRowMatrixval distIdxMat1 = spark.sparkContext.parallelize(List(IndexedRow(0L, dataVectors.head),IndexedRow(1L, dataVectors(1)), IndexedRow(1L, dataVectors(2))))distIdxMat1.foreach(println)// IndexedRow(0,[0.0,1.0,0.0])  index , RDD row// IndexedRow(1,[3.0,1.0,5.0])// IndexedRow(1,[0.0,7.0,0.0])println("distinct elements=", distIdxMat1.distinct().count()) // 3// CoordinateMatrixval CoordinateEntries = Seq(MatrixEntry(1, 6, 300.0), // 对应坐标,x,y类型必须 long,  z doubleMatrixEntry(3, 1, 5),MatrixEntry(1, 7, 10))val distCordMat1 = new CoordinateMatrix(spark.sparkContext.parallelize(CoordinateEntries.toList))println("First Row (MarixEntry) =",distCordMat1.entries.first())// (First Row (MarixEntry) =,MatrixEntry(1,6,300.0))// BlockMatrixval distBlkMat1 =  distCordMat1.toBlockMatrix().cache()distBlkMat1.validate()// Validates the block matrix info against the matrix data (blocks)// and throws an exception if any error is found.println("Is block empty =", distBlkMat1.blocks.isEmpty())// (Is block empty =,false)spark.stop()}
}

pom.xml

<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>org.example</groupId><artifactId>examples</artifactId><version>1.0-SNAPSHOT</version><packaging>jar</packaging><dependencies><dependency><groupId>net.jpountz.lz4</groupId><artifactId>lz4</artifactId><version>1.3.0</version></dependency></dependencies><properties><maven.compiler.source>8</maven.compiler.source><maven.compiler.target>8</maven.compiler.target></properties></project>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/472257.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

atitit. orm框架的hibernate 使用SQLQuery createSQLQuery addEntity

atitit. orm框架的hibernate 使用SQLQuery createSQLQuery addEntity 1. addEntity 对原生SQL查询执行的控制是通过SQLQuery接口进行的&#xff0c;通过执行Session.createSQLQuery()获取这个接口。最简单的情况下&#xff0c;我们可以采用以下形式&#xff1a; List cats ses…

【机器学习】回归算法-线性回归分析、回归实例和回归性能评估

回归算法-线性回归分析、回归实例和回归性能评估线性回归损失函数(误差大小)sklearn线性回归正规方程、梯度下降API线性回归实例回归&#xff1a;目标值连续&#xff1b;分类&#xff1a;目标值离散。 预测回归和分类是不一样的。回归问题可以用于预测销售额&#xff0c;比如公…

scrapy使用代理报错keyerror: proxy_爬虫Scrapy框架-Crawlspider链接提取器与规则解析器...

Crawlspider一&#xff1a;Crawlspider简介CrawlSpider其实是Spider的一个子类&#xff0c;除了继承到Spider的特性和功能外&#xff0c;还派生除了其自己独有的更加强大的特性和功能。其中最显著的功能就是”LinkExtractors链接提取器“。Spider是所有爬虫的基类&#xff0c;其…

activity-启动动画的设定(下面弹出出现,弹入下面消失)

1.今天为了把一个activity以dialog的形式显示&#xff0c;而且实现从开始的时候从底部往上弹出&#xff0c;结束的时候&#xff0c;从上往下消失&#xff0c;做了如下的工作。 1&#xff09;如果把一个activity以dialog的形式显示&#xff1f; 这个只需要设置theme的样式为*.di…

传智书城首页设计代码_(自适应手机版)响应式创意餐饮酒店装饰设计类网站织梦模板 html5蓝色餐饮酒店设计网站源码下载...

模板名称&#xff1a;(自适应手机版)响应式创意餐饮酒店装饰设计类网站织梦模板 html5蓝色餐饮酒店设计网站源码下载本套织梦模板采用织梦最新内核开发的模板&#xff0c;这款模板使用范围广&#xff0c;不仅仅局限于一类型的企业&#xff0c;创意设计、装饰设计、餐饮酒店设计…

【机器学习】逻辑回归—良/恶性乳腺癌肿瘤预测

逻辑回归—良&#xff0f;恶性乳腺癌肿瘤预测 逻辑回归的损失函数、优化 与线性回归原理相同,但由于是分类问题&#xff0c;损失函数不一样&#xff0c;只能通过梯度下降求解 sklearn逻辑回归API sklearn.linear_model.LogisticRegressionLogisticRegression sklearn.linear…

mysql分组之后统计数量

select count(*) from(SELECT count(*) FROM 表名 WHERE 条件 GROUP BY id ) a ; 转载于:https://www.cnblogs.com/shenming/p/4343895.html

opencv mat初始化_【OpenCV入门之十二】看起来一样的图像竟然存在这么大的差别!...

小白导读学习计算机视觉最重要的能力应该就是编程了&#xff0c;为了帮助小伙伴尽快入门计算机视觉&#xff0c;小白准备了【OpenCV入门】系列。新的一年文章的内容进行了很大的完善&#xff0c;主要是借鉴了更多大神的文章&#xff0c;希望让小伙伴更加容易理解。如果小伙伴觉…

LeetCode 1854. 人口最多的年份(差分)

文章目录1. 题目2. 解题1. 题目 给你一个二维整数数组 logs &#xff0c;其中每个 logs[i] [birthi, deathi] 表示第 i 个人的出生和死亡年份。 年份 x 的 人口 定义为这一年期间活着的人的数目。 第 i 个人被计入年份 x 的人口需要满足&#xff1a;x 在闭区间 [birthi, dea…

hdu 4280 最大流sap

模板套起来 1   5 7  //5个结点&#xff0c;7个边 3 3  //坐标 3 0   3 1 0 0 4 5 1 3 3  //相连的结点和流 2 3 4 2 4 3 1 5 6 4 5 3 1 4 4 3 4 29 1 #include<cstdio>2 #include<algorithm>3 #include<cstring>4 using namespace std;5 const in…

Opencv visual studio c++ 环境搭建

转载&#xff1a; https://blog.csdn.net/smilife_/article/details/89244189 https://blog.csdn.net/cwj066/article/details/82252764 c 环境搭建 下载链接opencv-3.4.5-vc14_vc15.exe 第一步&#xff1a;去opencv官网(https://opencv.org/)下载opencv源码https://opencv.…

服务端_说说Netty服务端启动流程

点击上方☝SpringForAll社区 轻松关注&#xff01;及时获取有趣有料的技术文章本文来源&#xff1a;http://yeming.me/2016/03/12/netty1/netty服务端代码分析服务端启动配置对于 ServerBootstrap&#xff1a;ServerBootstrap继承于 AbstractBootstrap&#xff0c;它从父类继承…

python能做哪些客户端_发布一个Httpsqs的Python客户端

这款软件有几种客户端, Java/Perl/C,却没有Python的客户端.故,本人奉上一个实现,欢迎指正!!代码:#Verion 1.0#Author wendal(wendal1985gmail.com)#If you find a bug, pls mail meimport sys,httplibERROR HTTPSQS_ERRORGET_END HTTPSQS_GET_ENDPUT_OK HTTPSQS_PUT_OKPUT_E…

ztree在刷新时第一个父节点消失_第一个关于中式菜谱的智能问答机器人小程序正式上线啦...

为了满足大家对菜品烹饪的各类问题能直接得到答案的需求&#xff0c;我开发了目前第一个真正关于菜谱的智能问答系统&#xff0c;并在微信小程序发布上线。这套系统支持对于8600多种菜品的问答功能&#xff0c;并能实现快速问答响应&#xff0c;整套系统后端依托于搭建的中式菜…

LeetCode 1855. 下标对中的最大距离(双指针)

文章目录1. 题目2. 解题1. 题目 给你两个 非递增 的整数数组 nums1​​​​​​ 和 nums2​​​​​​ &#xff0c;数组下标均 从 0 开始 计数。 下标对 (i, j) 中 0 < i < nums1.length 且 0 < j < nums2.length 。如果该下标对同时满足 i < j 且 nums1[i] …

【Python基础知识-pycharm版】第一节-基础

python第一节特点Python 解释器python开发环境交互模式IDLE开发环境使用入门程序基本格式图形化程序设计python程序的构成python程序的对象python的引用python的标识符标识符命名规则变量和简单赋值语句删除变量和垃圾回收机制Python 是一种解释型、面向对象的语言。 官网&…

解决Eclipse 项目报错:Unbound classpath container

Eclipse出现下面两条报错&#xff1a;The project cannot be built until build path errors are resolved HelloWord Unknown Java ProblemUnbound classpath container: JRE System Library [JavaSE-1.7] in project java project name java project name Build path Build P…

c++对象回收string类型成员时coredump_本体技术视点 | 虚拟机中引用性动态语言对象模型思考...

1引言Ontology 的 NeoVM 虚拟机新增加了 DCALL、HAS_KEY、KEYS 以及 VALUES 等几条新的指令。因此&#xff0c;基于 NeoVM 的引用性动态语言对象的设计理论上可行&#xff0c;这可使得当前语言的支持能更接近原生语义。对象模型设计的必要性Ontology NeoVM 对用户暴露的对象语义…

LeetCode 1856. 子数组最小乘积的最大值(前缀和 + 单调栈)

文章目录1. 题目2. 解题1. 题目 一个数组的 最小乘积 定义为这个数组中 最小值 乘以 数组的 和 。 比方说&#xff0c;数组 [3,2,5] &#xff08;最小值是 2&#xff09;的最小乘积为 2 * (325) 2 * 10 20 。 给你一个正整数数组 nums &#xff0c;请你返回 nums 任意 非空…