创建vectors.dense和sparse.dense,它们相同吗?

kognpnkq  于 2021-05-26  发布在  Spark
关注(0)|答案(1)|浏览(308)

我正试图对这两种类型有更多的理解,所以我创建了这两个数组,看看我是否做得对。我现在要做的是创建两个相同的数组,我的目标是:

dv = [1.0, 0.0, 3.0]
sv = [1.0, 0.0, 3.0]

所以我写了下面的语法,

from pyspark.sql import SparkSession
from pyspark.ml.linalg import Vectors

spark = SparkSession.builder.getOrCreate()

dv = Vectors.dense(1.0, 0.0, 3.0)

sv = Vectors.sparse(3, [(0,2), (1.,3.)])

因此,我的第一个问题是,我的语法正确吗?
我的第二个问题是,当我打印的时候,

print(dv)
print(sv)

它们返回:

[1.0,0.0,3.0]
(3,[0,1],[2.0,3.0])

那么,如何显示sv的“真实”数组呢?像不是在这个“向量密度”里?形式?

2g32fytz

2g32fytz1#

稀疏向量的创建有点不正确。从文档中:第二个和第三个参数应该是
包含索引和值的两个排序列表
这给

sv = Vectors.sparse(3, [0,2], [1.,3])

为了将向量转换成数组,可以使用函数向量到数组。

from pyspark.sql import functions as F
from pyspark.ml.functions import vector_to_array

spark.createDataFrame([(dv,), (sv,)], ['col1']) \
    .withColumn("as_array", vector_to_array(F.col('col1'))) \
    .show(truncate=False)

印刷品

+-------------------+---------------+
|col1               |as_array       |
+-------------------+---------------+
|[1.0,0.0,3.0]      |[1.0, 0.0, 3.0]|
|(3,[0,2],[1.0,3.0])|[1.0, 0.0, 3.0]|
+-------------------+---------------+

相关问题