我在使用 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 回答

慕少森
TA贡献2019条经验 获得超9个赞
我假设你的代码看起来像这样
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。
您的问题的解决方案是明确指定 array 的类型a1。
a1 = np.array([0, 0, 0], dtype='float64')
另一方面,为什么要逐个复制元素?你本可以做的
a1 = np.asarray(update)
添加回答
举报
0/150
提交
取消