2017-05-18 4 views
2
私は配列に関数を適用するために、私の機能のために numpy.vectorize()を使用しています

、それが正常に動作します:numpyベクトル化関数が返すリストを丸める方法は?

X = [-10000, -1000, -100, -10, -1, 0, 1, 10, 100, 1000, 10000] 
def softplus(x): 
    return np.logaddexp(1.0,x) 
y=numpy.vectorize(softplus) 

問題は、私は4に小数点以下を四捨五入したリストにnumpy.around()を使用したいということです結果はprintには影響しません。

result = y(X) 
print(numpy.around(result, decimals=4)) 

np.logaddexpが既にベクトル化機能(np.aroundのように)であるため、あなたがここにvectorizeを必要としない出力

[ 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 ...] 
+0

「ベクトル化」ロジックはすべて冗長です。単に 'np.logaddexp(1.0、X)'を使用してください。 –

+0

@NilsWerner Trueですが、それは問題ではありません。 –

+2

そして、私にとっては出力も正しいです( 'array([...、1.12690000e + 00、1.31330000e + 00、...]))。たぶん、印刷フォーマットの浮動小数点値と丸めを混同しているのでしょうか? –

答えて

2

。しかしvectorizeが正しい結果得られます。また

>>> np.logaddexp(1.0, X) 
array([ 1.00000000e+00, 1.00000000e+00, 1.00000000e+00, 
     1.00001670e+00, 1.12692801e+00, 1.31326169e+00, 
     1.69314718e+00, 1.000e+01, 1.00000000e+02, 
     1.00000000e+03, 1.00000000e+04]) 

np.aroundは正しく結果丸め:

>>> np.around(np.loagaddexp(1.0, X)) 
array([ 1.00000000e+00, 1.00000000e+00, 1.00000000e+00, 
     1.00000000e+00, 1.12690000e+00, 1.31330000e+00, 
     1.69310000e+00, 1.00001000e+01, 1.00000000e+02, 
     1.00000000e+03, 1.00000000e+04]) 

をしかし、あなたは唯一の4小数点以下を表示したい場合には、例えば、何か他のものを使用する必要がありますnp.array2string

>>> print(np.array2string(np.logaddexp(1., X), precision=4)) 
[ 1.0000e+00 1.0000e+00 1.0000e+00 1.0000e+00 1.1269e+00 
    1.3133e+00 1.6931e+00 1.0000e+01 1.0000e+02 1.0000e+03 
    1.0000e+04] 

それとも、あなたが使用できる4小数カスタムフォーマを表示したい場合、 tter:

>>> print(np.array2string(np.logaddexp(1., X), formatter={'float': '{:.4f}'.format})) 
[1.0000 1.0000 1.0000 1.0000 1.1269 1.3133 1.6931 10.0001 100.0000 
1000.0000 10000.0000] 

seperatorと:print文が異なること

>>> print(np.array2string(np.logaddexp(1., X), 
...      formatter={'float': '{:.4f}'.format}, 
...      separator=', ')) 
[1.0000, 1.0000, 1.0000, 1.0000, 1.1269, 1.3133, 1.6931, 10.0001, 100.0000, 
1000.0000, 10000.0000] 
+0

詳細についてはMSeifertありがとうございます。私は[1.0000,1.0000,1.0000,1.0000,1.1269,1.3133,1.6931,10.001,100.0000,1000.0000,10000.0000]のように丸めた後に配列を求めます – Sahim

+0

@Sahim問題はありません。あなたの問題を解決した場合は、それを受け入れることを検討したいかもしれません。それが解決しない場合は、答えの一部が機能しないか、または明確化が必要な別のコメントを投稿してください:) – MSeifert

+0

@Sahim ok、私は答えを更新しました。 :)希望する結果が表示されます。 :) – MSeifert

0

お知らせ、あなたはラウンド()文なしで結果を印刷しています、その結果を確認し、[7]。 e + 01は* 10などを意味します。

関連する問題