2017-01-30 11 views
2

は私がInexactError得る最後の行でコード奇妙なセット・インデックス・エラー

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

のこの塊の上に立ち往生しています。 randn()はFloat64なので奇妙ですが何らかの理由でhdiag=randn(2)を実行しなければ問題ありません。

+1

xref:http://stackoverflow.com/questions/33002572/creating-copies-in-julia-with-operator – Gnimuc

答えて

6

ライン:

hdiag = [0,0] 

は、それが以前にあったものをより完全に新しいと異なる配列を参照するためにhdiagを変更します。この場合、その新しい配列は整数配列であり、以降の割り当てはすべて整数に変換可能である必要があります。

インデックスの割り当ては異なります。既存の配列の内容を変更します。だからhdiag[:] = [0,0]を使うことができ、内容を変更して整数を浮動小数点に変換します。これにより、既存のアレイに割り当てるには、新しい.=ドット割り当て構文を使用することができ、バージョン0.5でさらに簡単になります:

hdiag .= [0,0] 

は、あなたがやりたいだろう。配列、バインディング、割り当てに関する詳細については、このブログ記事を読むことをお勧めします。Values vs. Bindings: The Map is Not the Territory.