append()问题

时间:2018-09-15 09:53:54

标签: python numpy

我试图通过使用x.append()将Python中的不同数组添加到一个空列表x中。这就是我所做的:

x = []
y = np.zeros(2)
for i in range(3):
    y += 1
    x.append(y)

x
[array([3., 3.]), array([3., 3.]), array([3., 3.])]

您看到的问题是它重复了最后的结果,而我想要的是获取一个包含不同数组的列表,例如:[[3., 3.],[4., 4.], [5., 5.]]

3 个答案:

答案 0 :(得分:4)

您要在整个循环中更改相同的数组,将y的创建移到您的循环中:

x=[]
for i in range(3):
   y = np.zeros(2) + i
   x.append(y)

答案 1 :(得分:2)

详细评论您的问题。

Python一直在使用y的相同实例。 在循环结束时,您可以将列表x视为:x = [y, y, y],并将对y所做的每个更改应用于x中的每个条目。

如果要在每次迭代中都有唯一的副本,则需要制作变量的完整副本。

import copy
x = []
y = np.zeros(2)
for i in range(3):
  y = copy.deepcopy(y) # based on the comment it is enough  
  y += 1               # to put y = y + 1 (also creates a new copy)
  x.append(y)

我希望它可以帮助您更多地了解Python的功能(有关更多详细信息,另请参见Immutable vs Mutable types)。

但是,这似乎效率很低。

答案 2 :(得分:0)

使用numpy的full()函数。您必须指定array的维数(在您的情况下为1行,2个列),并指定要填充的值,即i提供的值

x = []
y = np.zeros(2)
for i in range(3):
    y =np.full((1,2),i)
    x.append(y)

x

[array([[0, 0]]), array([[1, 1]]), array([[2, 2]])]