当前位置:网站首页>Pyspark机器学习:向量及其常用操作
Pyspark机器学习:向量及其常用操作
2022-08-01 04:11:00 【Sun_Sherry】
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)
其结果如下(注意其数据类型为float型):
1.2 常用操作
- 对两个长度相同的向量可以进行加减乘除操作。具体如下:
res1=dvect1+dvect2
res2=dvect1-dvect2
res3=dvect1*dvect2
res4=dvect1/dvect2
print(res1)
print(res2)
print(res3)
print(res4)
其结果如下:
- 可以使用numpy.darray中的一些属性
dvec1_shape=dvect1.array.shape
dvec1_size=dvect1.array.size
print(dvec1_shape)# 其结果为:(5,)
print(dvec1_size)# 其结果为:5
- 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
- 求向量的范式
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))
其结果如下:
- numNonZeros()统计非0元素的个数
dvect1=linalg.Vectors.dense([1,0,3,0,5])
num_nonzero=dvect1.numNonzeros()
print(num_nonzero)#其结果为3
- squared_distance()求两个维度相同的向量的平方距离
dvect1=linalg.Vectors.dense([1,0,3])
dvect2=linalg.Vectors.dense([1,1,1])
dist=dvect1.squared_distance(dvect2) #其值为5
- 取出向量的值
dvect1=linalg.Vectors.dense([1,0,3])
print(dvect1.toArray())
print(dvect1.values)
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)])
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())
其结果如下:
- 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]
边栏推荐
- 在互联网时代,有诸多「互联网+」模式的诞生
- Error using ts-node
- 数组问题之《下一个排列》、《旋转图像》以及二分查找之《搜索二维矩阵》
- 【Make YOLO Great Again】YOLOv1-v7全系列大解析(Neck篇)
- Interview Blitz 69: Is TCP Reliable?Why?
- PMP 项目沟通管理
- 时时刻刻保持敬畏之心
- leetcode6132. Make all elements in an array equal to zero (simple, weekly)
- JS new fun(); 类与实例 JS基于对象语言 只能通过书写构造函数充当类
- 开源项目站点必备&交流区功能
猜你喜欢
【入门教程】Rollup模块打包器整合
Weekly Summary (*67): Why not dare to express an opinion
The fledgling Xiao Li's 114th blog project notes: Wisdom cloud intelligent flower watering device combat (3) - basic Demo implementation
The bigger and bigger the project is, I split it like this
Flutter "Hello world" program code
怀念故乡的面条
C# | 使用Json序列化对象时忽略只读的属性
Message queue design based on mysql
TypeScript简化运行之ts-node
leetcode6132. 使数组中所有元素都等于零(简单,周赛)
随机推荐
Flutter Tutorial 02 Introduction to Flutter Desktop Program Development Tutorial Run hello world (tutorial includes source code)
这个地图绘制工具太赞了,推荐~~
button去除黑框
FFmpeg 搭建本地屏幕录制环境
软件测试面试(三)
When opening a MYSQL table, some can display editing, some do not, how to set.
【SemiDrive源码分析】系列文章链接汇总(全)
Difference Between Compiled and Interpreted Languages
Mysql基础篇(Mysql数据类型)
PMP 项目质量管理
2. # code comments
Mysql基础篇(约束)
The Principle Of Percona Toolkit Nibble Algorithm
After specifying set 'execution.savepoint.path', restart flinksql and report this error
动态规划 01背包
项目越写越大,我是这样做拆分的
HCIP (14)
Unknown Bounded Array
PMP 项目资源管理
Basic Theoretical Knowledge of Software Testing - Use Cases