如何使用 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 数组,具体取决于您的特定需求和偏好。
通过理解每种方法的优缺点,您可以选择最适合您特定需求的方法。