我被困在这段代码上
hdiag = zeros(Float64,2)
hdiag = [0,0]
println(hdiag)
hdiag[1] = randn()
在最后一行,我获得InexactError
。
这很奇怪,因为randn()它是一个Float64
,但出于某种原因我必须做hdiag=randn(2)
然后应该没有问题。
答案 0 :(得分:6)
该行:
hdiag = [0,0]
更改 hdiag
以引用一个比以前更全新的不同数组。在这种情况下,新数组是一个整数数组,因此任何后续赋值都需要转换为整数。
索引分配不同;它会更改现有数组的内容。所以你可以使用hdiag[:] = [0,0]
它会更改内容,将整数转换为浮点数。这在0.5版本中变得更加容易,您可以使用新的.=
点分配语法分配到现有数组中:
hdiag .= [0,0]
会做你想要的。有关数组,绑定和赋值的更多详细信息,建议您阅读此博文:Values vs. Bindings: The Map is Not the Territory.