当前位置:网站首页>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]
边栏推荐
猜你喜欢

开源项目站点必备&交流区功能

button remove black frame

Mysql基础篇(约束)

Message queue design based on mysql

【愚公系列】2022年07月 Go教学课程 023-Go容器之列表

This article takes you to understand the past and present of Mimir, Grafana's latest open source project

黑客到底可以厉害到什么程度?

Make your Lottie support word wrapping in text fields

开源许可证 GPL、BSD、MIT、Mozilla、Apache和LGPL的区别

second uncle
随机推荐
JS new fun(); class and instance JS is based on object language Can only act as a class by writing constructors
C# | 使用Json序列化对象时忽略只读的属性
Software Testing Weekly (Issue 82): In fact, all those who are entangled in making choices already have the answer in their hearts, and consultation is just to get the choice that they prefer.
Difference Between Compiled and Interpreted Languages
IJCAI2022 | Hybrid Probabilistic Reasoning with Algebraic and Logical Constraints
SQL Analysis of ShardingSphere
August 22 Promotion Ambassador Extra Reward Rules
button去除黑框
时时刻刻保持敬畏之心
"Youth Pie 2": The new boyfriend stepped on two boats, and the relationship between Lin Miaomiao and Qian Sanyi warmed up
PMP子过程定义总结
【愚公系列】2022年07月 .NET架构班 085-微服务专题 Abp vNext微服务网关
Mysql基础篇(Mysql数据类型)
Make your Lottie support word wrapping in text fields
【云原生之kubernetes实战】kubernetes集群的检测工具——popeye
win10 固定本机IP
Flutter Tutorial 02 Introduction to Flutter Desktop Program Development Tutorial Run hello world (tutorial includes source code)
MySQL3
Dart named parameter syntax
MySQL4