所以这就是我试图做的事情。
vectorized = [0] * length
for i,key in enumerate(foo_dict.keys()):
vector = vectorized
vector[i] = 1
print vector
vector = vectorized
print vectorized
所以我希望的是例如长度为4.所以我创造了 4维向量:
vectorized=[0,0,0,0]
现在,取决于字典的索引(在这种情况下长度为4) 创建一个值为1的向量,而rest为零
so vector = [1, 0,0,0] , [0,1,0,0] and so on..
现在发生的事情是:
vector = [1,0,0,0],[1,1,0,0] .. and finally [1,1,1,1]
甚至矢量化现在
[1,1,1,1]
我做错了什么。以及我如何实现我想要实现的目标。 基本上我正在尝试创建单位向量。 感谢
答案 0 :(得分:9)
这一行(这些行,真的):
vector = vectorized
复制列表参考。您需要对序列内容进行浅层复制。
vector = vectorized[:]
答案 1 :(得分:5)
您正在创建单个列表,然后为其提供多个不同的名称。请记住,a = b不会创建新对象。它只是意味着a和b都是同一个东西的名称。
请改为尝试:
for ...:
vector = [0] * length
...
答案 2 :(得分:4)
该行
vector = vectorized
没有制作vectorized
的副本。每当你从那时起改变vector
时,你也会改变`vectorized。
您可以将第一行更改为:
vector = vectorized[:]
或
import copy
vector = copy.copy(vectorized)
如果你想复制一份。
答案 3 :(得分:2)
在Python中,当您将列表分配给新列表时,新列表只是一个指针而不是一个全新的列表。
因此,当您尝试修改“vector”的值时,实际上是在更改“vectorized”的值。
在你的情况下,
vector[i] = 1
和...一样
vectorized[i] = 1
答案 4 :(得分:1)
您的问题是,当您编写vector = vectorized
时,它不会创建数组的副本,而是在两者之间创建绑定。
Python中的赋值语句不复制对象,它们在目标和对象之间创建绑定。
http://docs.python.org/library/copy.html
这可以帮助你整理出来。
这里有一个来自python REPL的小片段,告诉你我的意思。
>>> vectorized = [0] * 4
>>> print vectorized
[0, 0, 0, 0]
>>> vector = vectorized
>>> vector[1] = 1
>>> print vectorized
[0, 1, 0, 0]
编辑:Jeez,你们快点!