2

ubuntu Linux マシンの新しい Python 2.7.3 インタープリターで次のコードを実行すると、コードの後に​​表示される出力が得られます。

import numpy as np
p = [1/3., 1/2., 23/25., 1]
q = np.array(p)
r = list(q)
print p; print q; print r

出力:

[0.3333333333333333, 0.5, 0.92, 1]
[ 0.33333333  0.5         0.92        1.        ]
[0.33333333333333331, 0.5, 0.92000000000000004, 1.0]

p と r の出力が異なる理由を理解しようとしていますが、これまでのところもっともらしい理論はありません。それらが異なる理由について何か考えはありますか?

4

2 に答える 2

3

はとpのリストであるのに対し、は のリストであるため、印刷方法が異なります。floatintrnumpy.float64

In [23]: map(type, p)
Out[23]: [float, float, float, int]

In [24]: map(type, r)
Out[24]: [numpy.float64, numpy.float64, numpy.float64, numpy.float64]

これは、NumPy 配列が均一な型であるため、float64作成時にすべてが拡張されるために発生しますq

2 つのリストの値は等しいので、純粋にフォーマットの違いです。

In [22]: p == r
Out[22]: True
于 2012-11-29T15:39:35.447 に答える
1

これは、 aと a python__repr__の実装方法の違いにすぎないと思います。 np.float64float

numpy 配列からリストを作成するときは、( type を使用してnp.float64) 要素を取得し、それらをリストに入れます。これで、実際に元のデータの型が から に変換されfloatましたnp.float64

于 2012-11-29T15:39:13.067 に答える