7

Pythonにfloatの配列がたくさんあります。

配列を出力すると、最初の値は次のようになります。

[7.14519700e+04, ....

ただし、それ自体で最初の値だけを印刷すると、印刷結果は次のようになります。

71451.9699799

明らかに、これらの数値は同じである必要があるので、配列は要素の丸められたバージョンを表示しているだけなのだろうかと思いました。ここでの2番目の数字には12の有効数字があり、最初の数字には9つしかありません。

なぜこれらの数字が違うのだろうか?

4

2 に答える 2

8

ストレージではなく、印刷されているだけです。最初の例では numpy の印刷精度設定を使用し、2 番目の例では一般的な python の印刷設定を使用しているため、唯一の混乱が生じる可能性があります。

numpy の精度を調整して印刷できます。

numpy.set_printoptions(precision=20)
print myarray`

(必要に応じて精度を調整します)、または標準の python 形式の印刷で有効数字の数を選択します。

print ('%.20f' % myarray[0])

数値の内部表現は常に同じです。

于 2013-02-28T18:12:25.697 に答える
4

numpy 配列の型は明確に定義されています。numpy.dtype配列のプロパティを調べることで、それらがどのように格納されているかを取得できます。

例えば:

import numpy
a = numpy.zeros(10)
print a.dtype

が表示さfloat64れます。これは 64 ビットの浮動小数点数です。

一般に受け入れられている dtype 引数または dtypetypeオブジェクト (つまり、dtype を作成するもの) を使用して、配列の型を明示的に指定できます。

a = numpy.zeros(10, dtype='complex32') # a 32-bit floating point
b = numpy.longdouble(a) # create a long-double array from a

印刷に関しては、これはフォーマットの問題です。次を使用して、numpy が配列を出力する方法をいじることができますnumpy.set_printoptions

>>> a = numpy.random.randn(3) # for interest, randn annoyingly doesn't support the dtype arg
>>> print a
[ 0.12584756  0.73540009 -0.17108244 -0.96818512]
>>> numpy.set_printoptions(precision=3)
>>> print a
[ 0.126  0.735 -0.171 -0.968]
于 2013-02-28T18:03:52.573 に答える