【问题标题】:Change values of numpy array iteratively迭代地更改 numpy 数组的值
【发布时间】:2018-11-01 17:34:32
【问题描述】:

我有一个 numpy 数组的问题: a1 是一个 numpy 数组(一个 3 维向量),而 update 是一个包含三个值的列表。我希望 a1 的第一个维度是第一个值,第二个维度是第二个值,第三个维度是第三个。

a1 = [0, 0, 0]
update = [0.6402942957283034, 0.6017736334918196, 0.6096552413265736]

所以基本上,我想要:

a1 = [0.6402942957283034, 0.6017736334918196, 0.6096552413265736]

现在,如果我尝试迭代:

for i in range(0,3):
    a1[i] = update[i]

a1数组中的值没有变化,我还是得到:

a1 = [0, 0, 0]

为什么会发生,我该如何规避这个问题?

【问题讨论】:

    标签: python arrays numpy


    【解决方案1】:

    我假设你的代码看起来像这样

    a1 = np.array([0, 0, 0])
    update = [0.6402942957283034, 0.6017736334918196, 0.6096552413265736]
    for i in range(0,3):
        a1[i] = update[i]
    print(a1)
    

    确实打印了array([0 0 0])

    您看到这种行为的原因是因为与 python 列表不同,numpy 数组必须包含相同类型的值。当您创建数组a1 时,您没有明确指定类型,因此创建了一个int64 数组。尝试做

    print(a1.dtype)
    

    update 是一个 float64 数组,其中所有数字都小于 1。当您将 float

    解决你的问题的方法是明确指定数组a1的类型。

    a1 = np.array([0, 0, 0], dtype='float64')
    

    另一方面,为什么要逐个元素地复制?你本来可以做的

    a1 = np.asarray(update)
    

    【讨论】:

    • 谢谢,这就是原因。
    • 奇怪的是,对我来说 a1 不是 [0,0,0] 而是 OP 想要的。问题中的代码对我来说很好
    • @Bazingaa 你在使用 numpy 数组吗?我在 macOS Mojave 上使用 numpy v1.8.0rc1、Python 2.7.10
    • @Lakshay 我将 update 初始化为一个列表,因为我的代码不起作用,我创建了 update 以查看它是否适用于列表,确实如此。所以我的问题更多是“为什么它适用于列表而不适用于 Numpy 数组”。在我的原始代码中更新没有用,这里我想问一个最普遍的问题。
    • @Bazingaa 我在 Windows 10 上的 Anaconda 上使用 Python 3.6.5
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-05
    • 2013-01-04
    相关资源
    最近更新 更多