我试图通过使用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.]]
。
答案 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]])]