猿问

迭代更改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]

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


ibeautiful
浏览 199回答 1
1回答

慕少森

我假设你的代码看起来像这样a1 = np.array([0, 0, 0])update = [0.6402942957283034, 0.6017736334918196, 0.6096552413265736]for i in range(0,3):&nbsp; &nbsp; 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)
随时随地看视频慕课网APP

相关分类

Python
我要回答