我遇到一个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]
为什么会发生,我该如何解决这个问题?
答案 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)