我对此代码有疑问.我想我做错了.
import numpy as np
array = np.zeros(10)
arrays = []
for i in range(len(array)):
array[i] = 1
arrays.append(array)
print(arrays[0])
我期望得到:[1. 0. 0. 0. 0. 0. 0. 0. 0. 0.]
但是我得到了:[1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1.]
那是我附加到数组的最后一个数组,而不是第一个.为什么会发生这种情况,更重要的是我该怎么做才能获得所需的输出?
最佳答案
我认为您期望:
arrays.append(array)
将主数组的COPY添加到数组列表中.但这不是你在做什么.每次执行时,您都将另一个引用推到同一数组:
arrays.append(array)
因此,在循环结束时,您将获得具有10个对创建的原始数组的引用的列表数组.到那时,您已经将一个数组的每个值都设置为1.因此,您将获得数组中的第一个值包含一个数组,且每个值都设置为1,因为数组中的每个数组都是该数组.
如果您实际上每次都将一个新数组复制到数组中,那么我敢打赌,您会得到期望的结果.为此,将该行更改为:
arrays.append(array.copy())
这是此修复程序的完整版本.我也更改了它以打印数组中的所有10个数组:
def main():
import numpy as np
array = np.zeros(10)
arrays = []
for i in range(len(array)):
array[i] = 1
arrays.append(array.copy())
for array in arrays:
print(array)
结果:
[1. 0. 0. 0. 0. 0. 0. 0. 0. 0.]
[1. 1. 0. 0. 0. 0. 0. 0. 0. 0.]
[1. 1. 1. 0. 0. 0. 0. 0. 0. 0.]
[1. 1. 1. 1. 0. 0. 0. 0. 0. 0.]
[1. 1. 1. 1. 1. 0. 0. 0. 0. 0.]
[1. 1. 1. 1. 1. 1. 0. 0. 0. 0.]
[1. 1. 1. 1. 1. 1. 1. 0. 0. 0.]
[1. 1. 1. 1. 1. 1. 1. 1. 0. 0.]
[1. 1. 1. 1. 1. 1. 1. 1. 1. 0.]
[1. 1. 1. 1. 1. 1. 1. 1. 1. 1.]