2017-05-11 13 views
1

私はfloat numpy配列を整数に変換しようとしています。私はそうするときしかし:あなたのいずれかが理由のアイデアを持っていた場合、私は思っていた、だから、Numpy astypeが間違った値に丸めます

[549 513 450 493 489 499 ... ] 

:この1へ

[ 550. 514. 451. 494. 490. 500. ...] 

array.astype(np.uint64) 

それがこの配列を変更しますこれは?私はnp.uint64を次のコードで出力する必要があります。

ありがとうございます。

+5

出力を再現できません。今まで試したコードを貼り付けることはできますか? – Satyadev

+7

'astype'を使ってfloatから整数にキャストするとき、Numpyは丸めませんが、小数点以下のすべての桁を切り捨てるだけです。浮動小数点は、印刷時に表示される丸い出力よりもわずかに小さくなります。したがって、以前に見ていたものよりも1つ小さい整数が得られます。例: 'np.array([549.999999999])。astype(np.uint64)' – jotasi

+0

したがって、 'astype'に渡す前に(例えば、' np.around'で)丸めることができます。 –

答えて

1

コメントで述べたように、整数へのキャストは丸められません。単純に非整数部分を切り捨てます。コンソール出力に550.と表示される浮動小数点数は、実際には549.999999999で、549に切り捨てられます。の型キャストの前に丸めてを使用してください。例:

>>> a = np.array([5, 6, 7], dtype=float) - 1e-12 
>>> a 
array([ 5., 6., 7.]) 
>>> a.astype(np.uint64) 
array([4, 5, 6], dtype=uint64) 
>>> np.around(a).astype(np.uint64) 
array([5, 6, 7], dtype=uint64) 
関連する問題