迭代地更改numpy数组的值

时间:2018-11-01 17:34:32

标签: python arrays numpy

我遇到一个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]

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

1 个答案:

答案 0 :(得分: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 <1转换为int时,它变为0。

您的问题的解决方案是显式指定数组a1的类型。

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

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

a1 = np.asarray(update)