• Pyspark机器学习:向量及其常用操作


    Spark版本:V3.2.1

      本篇主要介绍pyspark.ml.linalg中的向量操作。

    1. DenseVector(稠密向量)

    1.1 创建

    稠密向量和一般的数组差不多,其创建方法如下:

    from pyspark.ml import linalg
    import numpy as np
    dvect1=linalg.Vectors.dense([1,2,3,4,5])
    dvect2=linalg.Vectors.dense(1.2,3,3,4,5)
    print(dvect1)
    print(dvect2)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    其结果如下(注意其数据类型为float型):
    在这里插入图片描述

    1.2 常用操作
    • 对两个长度相同的向量可以进行加减乘除操作。具体如下:
    res1=dvect1+dvect2
    res2=dvect1-dvect2
    res3=dvect1*dvect2
    res4=dvect1/dvect2
    print(res1)
    print(res2)
    print(res3)
    print(res4)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    其结果如下:
    在这里插入图片描述

    • 可以使用numpy.darray中的一些属性
    dvec1_shape=dvect1.array.shape
    dvec1_size=dvect1.array.size
    print(dvec1_shape)# 其结果为:(5,)
    print(dvec1_size)# 其结果为:5
    
    • 1
    • 2
    • 3
    • 4
    • dot点乘操作
    res_1=dvect1.dot([1,2,3,4,5])
    res_2=dvect1.dot([0,1,0,0,0])
    res_3=dvect1.dot(dvect2)
    print(res_1) #结果为55
    print(res_2) #结果为2
    print(res_3) #结果为57.2
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 求向量的范式
    dvect1=linalg.Vectors.dense([1,2,3,4,5])
    norm_0=dvect1.norm(0)
    norm_1=dvect1.norm(1)
    norm_2=dvect2.norm(2)
    print('dvect1的L0范式为:{}'.format(norm_0))
    print('dvect1的L1范式为:{}'.format(norm_1))
    print('dvect1的L2范式为:{:.3f}'.format(norm_2))
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    其结果如下:
    在这里插入图片描述

    • numNonZeros()统计非0元素的个数
    dvect1=linalg.Vectors.dense([1,0,3,0,5])
    num_nonzero=dvect1.numNonzeros()
    print(num_nonzero)#其结果为3
    
    • 1
    • 2
    • 3
    • squared_distance()求两个维度相同的向量的平方距离
    dvect1=linalg.Vectors.dense([1,0,3])
    dvect2=linalg.Vectors.dense([1,1,1])
    dist=dvect1.squared_distance(dvect2) #其值为5
    
    • 1
    • 2
    • 3
    • 取出向量的值
    dvect1=linalg.Vectors.dense([1,0,3])
    print(dvect1.toArray())
    print(dvect1.values)
    
    • 1
    • 2
    • 3

    2. SparseVector(稀疏向量)

    2.1 创建

    稀疏向量的创建主要有以下几种方式:

    • Vectors.sparse(向量长度, 索引数组,与索引数组所对应的数值数组),其中索引从0开始编号,下同;
    • Vectors.sparse(向量长度, {索引:数值,索引:数值, … \dots })
    • Vectors.sparse(向量长度,[(索引,数值),(索引,数值), … \dots ])

    举例如下:

    svect1=linalg.Vectors.sparse(3,[0,1],[3.4,4.5])
    svect2=linalg.Vectors.sparse(3,{0:3.4,2:4.5})
    svect3=linalg.Vectors.sparse(4,[(2,3),(3,2.3)])
    
    • 1
    • 2
    • 3
    2.2 常用操作

    稀疏变量中一些操作与稠密向量的操作一致,不再赘述。这里只介绍以下两个操作:

    • toArray显示稀疏变量的所有数值
    svect1=linalg.Vectors.sparse(3,[0,1],[3.4,4.5])
    svect2=linalg.Vectors.sparse(3,{0:3.4,2:4.5})
    svect3=linalg.Vectors.sparse(4,[(2,3),(3,2.3)])
    print(svect1.toArray())
    print(svect2.toArray())
    print(svect3.toArray())
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    其结果如下:
    在这里插入图片描述

    • indices()返回稀疏向量中非0元素的索引值
    svect1=linalg.Vectors.sparse(3,[0,1],[3.4,4.5])
    svect2=linalg.Vectors.sparse(3,{0:3.4,2:4.5})
    svect3=linalg.Vectors.sparse(4,[(2,3),(3,2.3)])
    print(svect1.indices) #返回[0 1](array类型,下同)
    print(svect2.indices) #返回[0 2]
    print(svect3.indices) #返回[2 3]
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
  • 相关阅读:
    3-运行第一个docker image-hello world
    Redis数据持久化
    SpringBoot中CommandLineRunner和ApplicationRunner有什么不同呢?
    温习JAVA
    国际期货投机有什么风险?目前正大怎么样?
    elementplus中el-checkout绑定0或者1时未渲染选中
    【JAVA学习笔记】39 - final关键字
    H桥级联型五电平三相逆变器Simulink仿真模型
    书签收藏难整理?这款书签工具管理超方便
    stm32f103c8t6最小系统引脚及功能原理图
  • 原文地址:https://blog.csdn.net/yeshang_lady/article/details/126071153