加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

我如何使附加工作按预期使用数组?

发布时间:2020-12-17 17:40:17 所属栏目:Python 来源:网络整理
导读:我对此代码有疑问.我想我做错了. 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.

我对此代码有疑问.我想我做错了.

 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.]

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读