Notes—Dense Vector and Sparse Vector

本文介绍了Spark.ml.linalg中的两种向量类型——DenseVector和SparseVector。DenseVector存储所有元素,而SparseVector仅存储非零元素的索引和值,节省空间。此外,还提到了LabeledPoint类以及Python Scipy库中的类似概念。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

……未完待补充……
ref:
1. Spark官方文档
2. http://bbs.youkuaiyun.com/topics/391002544

在spark.ml.linalg里有两种vector——DenseVector 和 Sparse Vector,两者都继承于Vectors

1.两者区别
DenseVector: a value array

def:
Vectors.dense(values: Array[Double])
(直接把所有的元素都列出来了)

SparseVector : an index and a value array

def:
Vectors.sparse(size: Int, indices: Array[Int], values: Array[Double])
(存储元素的个数、以及非零元素的编号index和值value)

import org.apache.spark.mllib.linalg.{Vector, Vectors}

// Create a dense vector (1.0, 0.0, 3.0).
val dv: Vector = Vectors.dense(1.0, 0.0, 
### Sparse VectorDense Vector 的概念及用法 在机器学习和数据科学中,sparse vectordense vector 是两种表示向量的方式,它们各自有特定的用途和优缺点。 #### Sparse Vector Sparse vector 是指大部分元素为零或接近零的向量。这种类型的向量通常用于表示稀疏数据,例如文本数据中的词频向量(TF-IDF 向量)或推荐系统中的用户-物品交互矩阵。由于大部分元素为零,sparse vector 可以通过仅存储非零元素及其索引来节省存储空间和计算资源[^1]。 ```python # 示例:使用 Python 的 scipy.sparse 库创建 sparse vector from scipy.sparse import csr_matrix data = [1, 2, 3] indices = [0, 2, 4] indptr = [0, 3] sparse_vector = csr_matrix((data, indices, indptr), shape=(1, 5)) print(sparse_vector.toarray()) ``` #### Dense Vector Dense vector 是指所有元素都被显式存储的向量,即使其中包含许多零值。与 sparse vector 不同,dense vector 更适合于大多数数值计算库(如 NumPy 或 TensorFlow),因为这些库通常针对密集数据进行了优化。此外,在某些情况下,将 sparse vector 转换为 dense vector 可能会提高计算效率,尽管这需要更多的内存[^2]。 ```python # 示例:使用 NumPy 创建 dense vector import numpy as np dense_vector = np.array([1, 0, 2, 0, 3]) print(dense_vector) ``` #### Sparse Vector vs Dense Vector 在实际应用中,选择使用 sparse vector 还是 dense vector 取决于数据的特性以及所使用的算法。如果数据非常稀疏且算法支持 sparse vector,则应优先选择 sparse vector 以减少内存占用和加速计算。然而,如果算法不支持 sparse vector 或者数据并不稀疏,则应使用 dense vector[^3]。 #### 使用场景 - **Sparse Vector**:适用于高维稀疏数据,例如文本分类、推荐系统等。 - **Dense Vector**:适用于低维稠密数据,或者需要进行复杂数值运算的情况,例如深度学习模型中的权重向量。 ### 总结 Sparse vectordense vector 各有优劣,具体选择取决于数据特性和算法需求。对于稀疏数据,sparse vector 可以显著节省存储空间并提高计算效率;而对于稠密数据或需要复杂数值运算的情况,dense vector 则更为合适。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值