此代码有问题。我想我做错了。
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。]
那是我附加到数组的最后一个数组,而不是第一个。为什么会发生这种情况,更重要的是我该怎么做才能获得所需的输出?
答案 0 :(得分:4)
我认为您正在期待:
arrays.append(array)
将主阵列的COPY添加到阵列列表。但这不是你在做什么。每次您都将另一个对同一数组的引用推入:
arrays.append(array)
因此,在循环结束时,您将获得列表 arrays (列表),其中包含对创建的相同原始数组的10个引用。到那时,您已经将一个数组的每个值都设置为1。因此,您会得到 arrays 中的第一个值包含一个数组,其中每个值都设置为1,因为 arrays < / strong>是同一数组。
如果您实际上每次都将一个新数组复制到 arrays 中,我敢打赌,您会得到预期的结果。为此,请将该行更改为:
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.]
答案 1 :(得分:0)
只需添加此更改:
arrays.append(np.array(array))
答案 2 :(得分:0)
在numpy
中执行此操作的实际方法是使用np.tri()
:
np.tri(10)
Out[]:
array([[ 1., 0., 0., ..., 0., 0., 0.],
[ 1., 1., 0., ..., 0., 0., 0.],
[ 1., 1., 1., ..., 0., 0., 0.],
...,
[ 1., 1., 1., ..., 1., 0., 0.],
[ 1., 1., 1., ..., 1., 1., 0.],
[ 1., 1., 1., ..., 1., 1., 1.]])
答案 3 :(得分:-1)
您可以按照{Steve的建议,使用array.copy()
在numpy数组上定义的方法。
由于已经在解决此问题的一个答案(@Steve的答案)中使用过,所以我选择了另一种方法,即
deepcopy() function
以获取结果。
import numpy as np
from copy import deepcopy
array = np.zeros(10)
arrays = []
for i in range(len(array)):
array[i] = 1
arrays.append(deepcopy(array))
print(arrays)
# [array([1., 0., 0., 0., 0., 0., 0., 0., 0., 0.]), array([1., 1., 0., 0., 0., 0., 0., 0., 0., 0.]), array([1., 1., 1., 0., 0., 0., 0., 0., 0., 0.]), array([1., 1., 1., 1., 0., 0., 0., 0., 0., 0.]), array([1., 1., 1., 1., 1., 0., 0., 0., 0., 0.]), array([1., 1., 1., 1., 1., 1., 0., 0., 0., 0.]), array([1., 1., 1., 1., 1., 1., 1., 0., 0., 0.]), array([1., 1., 1., 1., 1., 1., 1., 1., 0., 0.]), array([1., 1., 1., 1., 1., 1., 1., 1., 1., 0.]), array([1., 1., 1., 1., 1., 1., 1., 1., 1., 1.])]
print(arrays[0])
# [1. 0. 0. 0. 0. 0. 0. 0. 0. 0.]
print(arrays[-1])
# [1. 1. 1. 1. 1. 1. 1. 1. 1. 1.]
答案 4 :(得分:-1)
也许您正在寻找这个,只是在代码中添加了条件
import numpy as np
array = np.zeros(10)
arrays = []
for i in range(len(array)):
if i==0:
array[i] = 1
arrays.append(array)
print(arrays[0])
out: [1. 0. 0. 0. 0. 0. 0. 0. 0. 0.]