奇怪的设置索引错误

use*_*579 2 julia

我被困在这段代码上

hdiag = zeros(Float64,2)
hdiag = [0,0]
println(hdiag)
hdiag[1] = randn()
Run Code Online (Sandbox Code Playgroud)

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

Mat*_* B. 6

这条线:

hdiag = [0,0]
Run Code Online (Sandbox Code Playgroud)

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

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

hdiag .= [0,0]
Run Code Online (Sandbox Code Playgroud)

会做你想做的.有关数组,绑定和赋值的更多详细信息,我建议您阅读此博客文章:值与绑定:地图不是地域.