求稠密向量的最大值,将其设置为1,其余的都设置为0[pyspark]

2024-09-30 16:22:05 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个包含密集向量的数据帧列。我想将这些向量的最大值设置为1,并将其余的全部替换为0。 例如:

+------+-------------+
|  Col1|       vector|
+------+-------------+
|Modali|[1.0,2.0,3.0]|
|assert|[4.0,9.0,3.0]|
+------+-------------+

我想把它变成:

^{pr2}$

请注意,我正在使用python开发spark2.1.0。 提前谢谢你。在


Tags: 数据assert向量col1vector密集pr2modali
1条回答
网友
1楼 · 发布于 2024-09-30 16:22:05

您可以创建一个udf,它接受一个向量并对其进行二值化;可以通过简单地使用列表理解检查向量中的值是否等于最大值来构造二进制化器:

from pyspark.ml.linalg import Vectors, VectorUDT
import pyspark.sql.functions as F

def max_binarizer(vector):
    max_val = max(vector)                              # maximum value in the vector
    return Vectors.dense([1 if x == max_val else 0 for x in vector])    # binarize it

# create a udf for the binarizer
max_bin_udf = F.udf(max_binarizer, VectorUDT())

df.withColumn("vector", max_bin_udf(df["vector"])).show()
+   +      -+
|  Col1|       vector|
+   +      -+
|Modali|[0.0,0.0,1.0]|
|assert|[0.0,1.0,0.0]|
+   +      -+

相关问题 更多 >