如何使用 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 次瀏覽

啟動您的職業生涯

完成課程後獲得認證

開始學習
廣告