Skip to main content
 首页 » 编程设计

python之python 中的稀疏向量

2025年05月04日12lyj

稀疏向量是一种向量,其条目几乎全为零,如 [1, 0, 0, 0, 0, 0, 0, 2, 0]。存储所有这些零会浪费内存,而字典通常只用于跟踪非零条目。例如,前面显示的向量可以表示为 {0:1, 7:2},因为它要表示的向量在索引 处具有值 1 code>0 和索引 7 处的值 2。如上所述,编写一个将稀疏向量转换为字典的函数。

示例

>>> convertVector([1, 0, 0, 2, 0, 0, 0, 3, 0, 0, 0, 0, 4]) 
{0: 1, 3: 2, 7: 3, 12: 4} 
>>> convertVector([1, 0, 1 , 0, 2, 0, 1, 0, 0, 1, 0]) 
{0: 1, 2: 1, 4: 2, 6: 1, 9: 1} 
>>> convertVector([0, 0, 0, 0, 0]) 
{} 

我的代码

def convertVector(numbers): 
    d = {i: 0 for i in numbers} 
    for k, c in enumerate(numbers): 
        d[c] = k  # increment its value 
 
    return d 
print convertVector([1, 0, 0, 2, 0, 0, 0, 3, 0, 0, 0, 0, 4]) 
print convertVector([1, 0, 1 , 0, 2, 0, 1, 0, 0, 1, 0]) 
print convertVector([0, 0, 0, 0, 0]) 

代码返回为

{0: 11, 1: 0, 2: 3, 3: 7, 4: 12} 
{0: 10, 1: 9, 2: 4} 
{0: 4} 

问题是它返回最后一个索引,对应于值。它应该在哪里返回

   {0: 1, 3: 2, 7: 3, 12: 4} 
    {0: 1, 2: 1, 4: 2, 6: 1, 9: 1} 
    {} 

有什么帮助吗?

请您参考如下方法:

def convertVector(numbers): 
    d = {} 
    for k, c in enumerate(numbers): 
        if c: 
            d[k] = c   
    return d 
 
print convertVector([1, 0, 0, 2, 0, 0, 0, 3, 0, 0, 0, 0, 4]) 
print convertVector([1, 0, 1 , 0, 2, 0, 1, 0, 0, 1, 0]) 
print convertVector([0, 0, 0, 0, 0])