稀疏向量是一种向量,其条目几乎全为零,如 [1, 0, 0, 0, 0, 0, 0, 2, 0]。存储所有这些零会浪费内存,而字典通常只用于跟踪非零条目。例如,前面显示的向量可以表示为 {0:1, 7:2},因为它要表示的向量在索引 处具有值 和索引 1 code>07 处的值 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])
