奇怪的设置索引错误

时间:2017-01-30 18:27:05

标签: julia

我被困在这段代码上

hdiag = zeros(Float64,2)
hdiag = [0,0]
println(hdiag)
hdiag[1] = randn()

在最后一行,我获得InexactError。 这很奇怪,因为randn()它是一个Float64,但出于某种原因我必须做hdiag=randn(2)然后应该没有问题。

1 个答案:

答案 0 :(得分:6)

该行:

hdiag = [0,0]

更改 hdiag以引用一个比以前更全新的不同数组。在这种情况下,新数组是一个整数数组,因此任何后续赋值都需要转换为整数。

索引分配不同;它会更改现有数组的内容。所以你可以使用hdiag[:] = [0,0]它会更改内容,将整数转换为浮点数。这在0.5版本中变得更加容易,您可以使用新的.=点分配语法分配到现有数组中:

hdiag .= [0,0]

会做你想要的。有关数组,绑定和赋值的更多详细信息,建议您阅读此博文:Values vs. Bindings: The Map is Not the Territory.