提问人:Jiminion 提问时间:9/17/2023 最后编辑:Jiminion 更新时间:9/20/2023 访问量:73
如何强制python浮点数不使用指数
How to force a python float to not use exponents
问:
我有一些问题,但这似乎是要点。
我有一些文本数字是用 Python 读入的,乘以 1000.0,然后使用,最终打印出来。
Data.Kin.X.L.Vals = -.800E-01 -.750E-01 -.700E-01 -.650E-01 -.600E-01 -.550E-01 -.500E-01
因此,在乘以 (1000.0) 之后,值应该(如果有的话会很好)为:
New.vals = -80。-75.-70.-65.-60.-55.-50.
有时(很少)他们是。但通常它们保持指数形式:
典型值 = -8.00E+01 -7.50E+01 -7.00E+01 -6.50E+01 -6.00E+01 -5.50E+01 -5.00E+01
我尝试过round(x,n),但这似乎不起作用。此外,这些是 numpy 数组中的值,如果这有什么不同的话。
这是用于创建打印出来的字符串的代码:
out = f'{k.strip()} = ' \
+ np.array2string(v,
prefix=f'{k} = ',
precision=5,
max_line_width=200,
floatmode='maxprec') + '\n'
更新:
我很快就会结束这个。总体上最好的工作答案是使用:
np.set_printoptions(suppress=True)
如果需要,您可以扩展精度,以便覆盖不会“绊倒”,并将它们保留为科学记数法。大于 8 的内容:
np.set_printoptions(精度=10)
它与numpy如何打印数据无关,尽管它确实与numpy有关。
答:
1赞
Xukrao
9/17/2023
#1
据我所知,没有可用于设置值的选项,当超过该值时会触发科学记数法。但是,您可以定义自己的字符串生成函数:
import numpy as np
def arr2str(arr, big=1e3, small_precision=0, big_precision=2):
"""Convert 1D array with floats to string.
Parameters
----------
arr : np.ndarray[float]
To-be-converted array.
big : float, optional
Numbers for which the absolute value is >= `big` are considered big and
will be printed in scientific notation. Otherwise the number is
considered small and will not be printed in scientific notation.
small_precision : float, optional
Precision for small numbers.
big_precision : float, optional
Precision for big numbers.
Returns
-------
str
"""
# Check input validity
if not arr.ndim == 1:
raise ValueError("Array does not have a dimension of one")
if not isinstance(arr[0], np.floating):
raise ValueError("Array does not contain floats")
str_list = []
for ele in arr:
if abs(ele) >= big:
str_list.append(f'{ele:.{big_precision}e}')
else:
str_list.append(f'{ele:.{small_precision}f}')
string = ' '.join(str_list)
string = '[' + string + ']'
return string
# Usage example
example_arr = np.array([-80., -75., -70., -65., 55., -50., 4294, -64921])
print(arr2str(example_arr))
指纹:
[-80 -75 -70 -65 55 -50 4.29e+03 -6.49e+04]
评论
Data.Kin.X.L.Vals