2016-11-28 11 views
0

こんにちは私は自分のコードで何が起こっているのか分かりません。 numpy.float64の動作方法はfloatとは異なるようです。python float対numpy.float異なる答えを与える?

私は同じ回答を与えるべきだと思いますが、そうではないと思います。 2E-05

0.2対

N = 500.0 
1.0/N*(np.absolute((-1.2e-10 -1e+02j))) = 0.2 
1.0/N*float(np.absolute(-1.2e-10 -1e+02j)) = 0.2 
1.0/float(N*np.absolute(-1.2e-10 -1e+02j)) = 2e-05 
N*np.absolute(-1.2e-10 -1e+02j) = 50000.0 

コード

print 'N*np.absolute(-1.2e-10 -1e+02j) = ',N*np.abs(-1.2e-10 -1e+02j) 
print 'type(N*np.abs(-1.2e-10 -1e+02j))',type(N*np.abs(-1.2e-10 -1e+02j)) 
print '1/5000 = ',1/5000 
print '' 
print '1.0/N*np.absolute(-1.2e-10 -1e+02j) = ',1.0/N*np.abs(-1.2e-10 -1e+02j) 
print 'type(1.0/N*np.abs(-1.2e-10 -1e+02j))',type(1.0/N*np.abs(-1.2e-10 -1e+02j)) 
print '' 
print '1.0/N(*np.absolute((-1.2e-10 -1e+02j))) = ',1.0/N*(np.abs(-1.2e-10 -1e+02j)) 
print 'type(1.0/N*np.abs(-1.2e-10 -1e+02j))',type(1.0/N*(np.abs(-1.2e-10 -1e+02j))) 
print '' 
print '1.0/N*float(np.absolute(-1.2e-10 -1e+02j)) = ',1.0/N*float(np.abs(-1.2e-10 -1e+02j)) 
print 'type(1.0/N*float(np.absolute(-1.2e-10 -1e+02j)))',type(1.0/N*float(np.absolute(-1.2e-10 -1e+02j))) 
print '' 
print '1.0/float(N*np.absolute(-1.2e-10 -1e+02j)) = ',1.0/float(N*np.abs(-1.2e-10 -1e+02j)) 
print 'type(1.0/float(N*np.abs(-1.2e-10 -1e+02j)))',type(1.0/float(N*np.abs(-1.2e-10 -1e+02j))) 

結果任意の助け

N*np.absolute(-1.2e-10 -1e+02j) = 50000.0 
type(N*np.abs(-1.2e-10 -1e+02j)) <type 'numpy.float64'> 
1.0/5000 = 0 

1.0/N*np.absolute(-1.2e-10 -1e+02j) = 0.2 
type(1.0/N*np.abs(-1.2e-10 -1e+02j)) <type 'numpy.float64'> 

1.0/N(*np.absolute((-1.2e-10 -1e+02j))) = 0.2 
type(1.0/N*np.abs(-1.2e-10 -1e+02j)) <type 'numpy.float64'> 

1.0/N*float(np.absolute(-1.2e-10 -1e+02j)) = 0.2 
type(1.0/N*float(np.absolute(-1.2e-10 -1e+02j))) <type 'numpy.float64'> 

1.0/float(N*np.absolute(-1.2e-10 -1e+02j)) = 2e-05 
type(1.0/float(N*np.abs(-1.2e-10 -1e+02j))) <type 'float'> 

おかげ

主な結果を助けてください。

答えて

0

これは操作の問題の順序です。

(1./N) * np.absolute((-1.2e-10 - 1e+02j)) 

で:明らかに、これらの

1./(N * np.absolute((-1.2e-10 - 1e+02j))) 

と異なる持ってしようとしているいくつかの余分な括弧を使用して...

>>> 1.0/N*float(np.absolute(-1.2e-10 -1e+02j)) 
0.2 
>>> 1.0/(N*float(np.absolute(-1.2e-10 -1e+02j))) 
2e-05 
>>> 1.0/N*(np.absolute((-1.2e-10 -1e+02j))) 
0.20000000000000001 
>>> 1.0/(N*(np.absolute((-1.2e-10 -1e+02j)))) 
2.0000000000000002e-05 

基本的には、違いは、あなたが比較しているということです値(実際にfloatnp.float64のどちらを使用しているかにかかわらず)。

+0

こんにちは、ありがとうございますが、問題は残ります – qwaszxee

+0

'N * np.absolute(-1.2e-10 -1e + 02j)= 50000.0 float(N * np.abs(-1.2e-10 -1e + 02j)) = 50000.0 (float(N * np.abs(-1.2e-10 -1e + 02j))= 50000.0 1.0 /(N * np.absolute(-1.2e-10 -1e + 02j))= 0.2 1.0 /(N * float(np.absolute(-1.2e-10 -1e + 02j)))= 2e-05 – qwaszxee

+0

@qwaszxee - 私はこの問題を理解しているかどうかはわかりません。 Nが500の場合、複素数の大きさは虚数項(〜100)によって支配され、500 * 100 = 50000のようなものになります。 – mgilson

関連する問題