如何使用 NumPy 抑制小数的科学计数法表示?


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

方法一:结合字符串格式化使用 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']

优点

  • 可以对每个元素应用特定的格式化。

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

缺点

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

方法二:使用 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 数组。

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

缺点

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

方法三:使用字符串格式化

字符串格式化有助于格式化 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']

优点

  • 可以对每个元素应用特定的格式化。

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

缺点

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

方法四:使用 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 数组,具体取决于您的特定需求和偏好。

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

更新于:2023年8月28日

194 次浏览

启动您的职业生涯

完成课程后获得认证

开始学习
广告