所以这就是我尝试做的。
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]
现在,取决于dictionary的索引(在这种情况下也是长度为4)创建一个值为1的矢量,而其余的为零
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]
我做错了什么。以及我如何实现我想要实现的目标。基本上,我正在尝试创建单位向量。感谢
这一行(实际上是这些行):
vector = vectorized
复制列表引用。您需要对序列内容进行浅层复制。
vector = vectorized[:]
您要创建一个列表,然后给它几个不同的名称。请记住,a=b不会创建新对象。这只是意味着a和b都是同一事物的名称。
试试这个:
for ...:
vector = [0] * length
...
行
vector = vectorized
没有复制CCD_ 1。从那时起,每当您更改vector
时,也会更改"矢量化"。
您可以将第一行更改为:
vector = vectorized[:]
或
import copy
vector = copy.copy(vectorized)
如果你想复制。
在Python中,当您将列表分配给新列表时,新列表只是一个指针,而不是一个全新的指针。
因此,当你试图修改"vector"的值时,你实际上是在改变"vectorized"的值。在你的情况下,vector[i] = 1
与vectorized[i] = 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]
编辑:天哪,你们快!