为了账号安全,请及时绑定邮箱和手机立即绑定

迭代更改numpy数组的值

迭代更改numpy数组的值

ibeautiful 2021-08-05 10:29:37
我在使用 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)


查看完整回答
反对 回复 2021-08-05
  • 1 回答
  • 0 关注
  • 179 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号