2017-03-29 19 views
0

Pythonでnp.exp(-28000)などの数値をどのように計算しますか?答えは約5E-12161です。私は、倍精度浮動小数点形式のため、私は数を計算することができると言われてきました> 1e-2048大きな負数の指数関数

+0

np.exp(-28000)の問題点は何ですか? – Eric

+0

np.exp(-28000)に対して0.0が得られます –

+0

この番号はどうしますか?数値の対数を扱うだけで済むように計算を整理できますか? exp(-28000)より-28000の方がはるかに簡単です。 –

答えて

0

小数点モジュールを試してみてください。

Decimal(math.exp(1))**-28000 
+0

ありがとう!今私は配列のためにこれを行う方法を理解する必要があります –

+0

@DanielGeorge:私は配列で動作するようにアプローチを追加しました。見てください。 – kmario23

1

任意精度の浮動小数点演算のためのmpmathを試し

編集1:あなたが「bigexponent」を計算し沿って(アレイに適用する関数を定義することができ

>>> import mpmath as mp 
>>> import numpy as np 
>>> a = np.matrix((0,0)) 
>>> print(a) 
[0.0 0.0] 
>>> b = mp.matrix(a.tolist()) 
>>> c = b.apply(mp.exp) 
>>> print(c) 
[1.0] 
[1.0] 
+0

pipを使ってそのモジュールをインストールしようとしましたが、コンパイル時に表示されませんでした。また、配列の指数関数を見つけようとしていますが、mpmathがこれをしないと聞きました。 –

+0

mpmath配列の場合、配列の操作を行うことができます。上記の例を参照してください – arduinolover

+0

@ arduinolover:これはnumpyの配列では機能しませんでしたが、numpyの配列をmp形式に変換する方法はわかりません。 – kmario23

0

軸)。ただし、入力配列の型はintである必要があります。 (降順)

# solution courtesy: http://stackoverflow.com/a/43084475/2956066 
In [97]: def bigexp(x): 
    ...:  return Decimal(math.exp(1))**x 


In [98]: np.apply_along_axis(bigexp, 1, arr)  

効率

# twice faster than applying along axis 0 
In [115]: %timeit np.apply_along_axis(bigexp, 1, a) 
1000 loops, best of 3: 272 µs per loop 

In [116]: %timeit np.apply_along_axis(bigexp, 0, a) 
1000 loops, best of 3: 465 µs per loop 
+0

私はあなたのメソッドを使ってみましたが、このエラーが発生しています:ValueError:axisはarr.ndimより小さくなければなりません。軸= 1、ランク= 1。 私が投稿した完全な質問をご覧ください:http://stackoverflow.com/q/43100725/6943476 –

関連する問題