如何使用 NumPy 抑制小数的科学符号使用?

pythonserver side programmingprogramming

使用 NumPy 数组时,您可能会遇到以科学符号表示的小数。虽然这种紧凑的表示方式很方便,但解读或比较值可能很困难。本指南深入探讨了四种不同的技术,以减少 NumPy 数组中小数的科学符号使用:使用 numpy.vectorize 和字符串格式化、使用 numpy.ndarray.round、利用字符串格式化和利用 numpy.set_printoptions。示例将阐明这些方法,讨论优缺点,并提供对每种方法的全面理解。

方法 1:使用 numpy.vectorize 和字符串格式化

numpy.vectorize 函数与字符串格式化结合使用时,可以抑制 NumPy 数组中的科学符号使用。这种方法有利于对每个元素应用特定的格式,从而产生一个新的格式化字符串数组。

语法

formatted_array = numpy.vectorize('{:.Nf}'.format)(array)

这里,N 表示要保留的小数位数,'{:.Nf}' 表示具有 N 位小数的浮点数的字符串格式化语法。 numpy.vectorize 函数将字符串格式应用于每个元素。

示例

在下面的例子中,我们构造一个包含小数字的 NumPy 数组,并使用带有字符串格式的 numpy.vectorize 来消除科学计数法。

import numpy as np

array = np.array([1e-10, 2e-10, 3e-10])
formatted_array = np.vectorize('{:.10f}'.format)(array)
print(formatted_array)

输出

['0.0000000001' '0.0000000002' '0.0000000003']

优点

  • 为每个元素赋予特定的格式化应用程序。

  • 可适应其他格式化要求。

缺点

  • 输出字符串数组,不适合进一步进行数值运算。

方法 2:使用 numpy.ndarray.round

numpy.ndarray.round 函数有助于将 NumPy 数组元素四舍五入到指定的小数位数,从而有效地减少科学计数法。此方法可用于将输出保留为具有数值的 NumPy 数组。

语法

rounded_array = array.round(N)

此处,N 表示要保留的小数位数。round 函数将每个元素四舍五入到小数点后 N 位。

示例

在以下示例中,我们创建一个具有小数的 NumPy 数组,并使用 numpy.ndarray.round 来减少科学计数法。

import numpy as np

array = np.array([1e-10, 2e-10, 3e-10])
rounded_array = array.round(10)
print(rounded_array)

输出

[0.0000000001 0.0000000002 0.0000000003]

优点

  • 将输出保留为具有数值的 NumPy 数组。

  • 适合进一步的数值运算。

缺点

  • 不适合特定的字符串格式要求。

3:使用字符串格式

字符串格式有助于格式化 NumPy 数组中的每个元素,从而抑制科学记数法。该方法类似于使用 numpy.vectorize 进行字符串格式化,但采用列表理解。

语法

formatted_array = ['{:.Nf}'.format(x) for x in array]

此处,N 表示要保留的小数位,'{:.Nf}' 表示具有 N 位小数的浮点数的字符串格式化语法。列表推导将字符串格式应用于每个元素。

示例

在下面的示例中,我们创建一个包含小数字的 NumPy 数组,并利用字符串格式来减少科学计数法。

import numpy as np

array = np.array([1e-10, 2e-10, 3e-10])
formatted_array = ['{:.10f}'.format(x) for x in array]
print(formatted_array)

输出

['0.0000000001', '0.0000000002', '0.0000000003']

优点

  • 为每个元素赋予特定的格式化应用程序。

  • 可适应其他格式化要求。

缺点

  • 输出字符串列表,不适合进一步进行数值运算。

方法 4:使用 numpy.set_printoptions

numpy.set_printoptions 函数有助于设置 NumPy 数组的全局打印选项,包括减少科学计数法。这种方法有助于修改代码中所有 NumPy 数组的默认打印行为。

语法

np.set_printoptions(suppress=True, precision=N)

此处,suppress=True 禁用科学计数法,precision=N 设置要保留的小数位数。

示例

在以下示例中,我们创建一个包含小数的 NumPy 数组,并利用 numpy.set_printoptions 来减少科学计数法。

import numpy as np

np.set_printoptions(suppress=True, precision=10)
array = np.array([1e-10, 2e-10, 3e-10])
print(array)

输出

[0.0000000001 0.0000000002 0.0000000003]

优点

  • 更改代码中所有 NumPy 数组的默认打印行为。

  • 输出仍然是具有数值的 NumPy 数组,适合进一步的数值运算。

缺点

  • 影响代码中的所有 NumPy 数组,在特定情况下可能不受欢迎。

  • 如果输出需要特定的字符串格式,则可能不合适。

结论

在本指南中,我们研究了如何使用各种技术减少 NumPy 数组中微小数字的科学记数法使用。我们探索了使用带有字符串格式的"numpy.vectorize"、使用"numpy.ndarray.round"、利用字符串格式以及利用"numpy.set_printoptions"。每种方法都提供了一种直接有效的方法来显示没有科学符号的 NumPy 数组,具体取决于您的特定要求和偏好。

通过理解每种方法的优缺点,您可以选择最适合您特定需求的方法。


相关文章