我正在为我的函数使用numpy.vectorize()
以便将函数应用于数组,它工作正常:
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)
问题是我想在结果列表中使用numpy.around()
将小数位数舍入为四,但不会影响print
结果。
result = y(X)
print(numpy.around(result, decimals=4))
输出
[ 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 ...]
答案 0 :(得分:2)
这里你不需要vectorize
,因为np.logaddexp
已经是一个矢量化函数(就像np.around
一样)。但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.00001234e+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
小数,可以使用自定义格式化程序:
>>> 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(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]
答案 1 :(得分:0)
请注意,print语句不同,您可以通过打印结果而不使用round()语句,检查结果[7]。 e + 01意味着* 10等等。