NumPy linspace():如何創建等距數字的數組

已發表: 2022-04-11

本教程將教你如何使用NumPy linspace()在 Python 中創建一個均勻間隔的數字數組。

您將學習 NumPy linspace()的語法,並通過示例幫助您了解如何使用它。

注意:要學習本教程,您需要安裝 Python 和 NumPy。

還沒有 NumPy? 我們為您整理了一份快速安裝指南。

開始吧!

安裝和導入 NumPy

在開始本教程之前,讓我們快速完成安裝 NumPy 庫的步驟。

如果您已經安裝了 NumPy,請隨時跳到下一部分。

  • 如果您使用的是 Google Colab(一種基於雲的 Jupyter 筆記本環境),則可以導入 NumPy 並立即開始編碼。 (推薦用於本教程)
  • 如果您想設置本地工作環境,我建議安裝 Python 的 Anaconda 發行版。 Anaconda 預裝了幾個有用的軟件包。 您可以下載適用於您的操作系統的安裝程序。 設置過程只需幾分鐘。
  • 如果您的計算機上已經安裝了 Python,您仍然可以安裝 Anaconda 發行版。 您可以使用 conda 或 pip 來安裝和管理軟件包。 您可以從 Anaconda 命令提示符運行以下命令之一來安裝 NumPy。
 # Install NumPy using conda conda install numpy # Install NumPy using pip pip install numpy

下一步,通過運行以下命令在別名np下導入numpy 。 這樣做將幫助您將 NumPy 引用為np — 無需在每次訪問模塊中的項目時都輸入numpy

 import numpy as np

展望未來,我們將使用點符號來訪問 NumPy 庫中的所有函數,如下所示: np.<func-name>

均勻間隔數字的情況

當您使用 NumPy 數組時,有時您需要在一個區間內創建一個由均勻間隔的數字組成的數組。

在我們繼續之前,讓我們快速回顧另一個類似的函數np.arange()

NumPy linspace() 與 NumPy arange()

如果您以前使用過 NumPy,您可能會使用np.arange()創建指定範圍內的數字數組。

您知道np.arange(start, stop, step)以 step 的step返回從start到但不包括stop的數字數組; 默認步長為 1。

但是, step的值可能並不總是顯而易見的。 讓我們看看為什麼會這樣。

例如,如果您需要 4 個介於 0 和 1 之間的等距數字,則您知道步長必須為 0.25。 但是如果你使用np.arange() ,它不包括 1 的停止值。所以你必須選擇一個超出停止值的間隔。

下圖說明了更多示例,您需要在區間 [a, b] 中具有特定數量的均勻間隔點。

numpy-linspace
區間內均勻分佈的點

我們在 [0,1] 中的 4 個均勻分佈的點的第一個示例非常簡單。 你知道點之間的步長應該是 0.25。

假設您有一個稍微複雜的示例——您必須在 1 到 33 之間列出 7 個均勻分佈的點。在這裡,步長可能不是很清楚。 但是,在這種情況下,您可以手動計算step的值。

但是, np.linspace()在這裡可以讓您更簡單!

使用 numpy-linspace
使用 NumPy 空間

使用np.linspace()時,您只需要指定區間中的點數 - 而無需擔心步長。 您將根據需要取回數組。

帶著這個動機,讓我們在下一節繼續學習 NumPy linspace()的語法。

NumPy linspace() 的語法

使用 NumPy linspace()的語法如下所示:

 np.linspace(start, stop, num, endpoint, retstep, dtype, axis)

一開始,上面的語法可能看起來很複雜,有很多參數。

但是,它們中的大多數是可選參數,我們將在幾分鐘內得出一個更簡單的語法。

現在讓我們從解析上面的語法開始:

  • startstop分別是區間的起點和終點。 start 和 stop 都可以是標量或數組。 在本教程中,我們將限制為標量開始值和結束值。
  • num是均勻分佈的點的數量。 它是一個可選參數,默認值為 50。
  • endpoint也是一個可選參數,可以是 True 或 False。
  • 默認值為 True,表示默認情況下將終點包含在區間中。 但是,您可以將其設置為 False 以排除端點。
  • retstep是另一個可選參數,它採用布爾值 True 或 False。 設置為 True 時,返回步長值。
  • dtype是數組中數字的數據類型。 該類型通常被推斷為 float 並且不需要顯式提供。
  • axis是另一個可選參數,表示應沿其存儲數字的軸。 這僅在startstop值本身是數組時才相關。

️ 那麼np.linspace()返回什麼?

它返回一個由均勻分佈的數字組成的 N 維數組。 如果參數retstep設置為True ,它也會返回步長。

根據到目前為止的討論,這是使用np.linspace()的簡化語法:

 np.linspace(start, stop, num)

上面的代碼行將返回一個間隔為[start, stop]num個等距數字組成的數組。

現在您已經了解了語法,讓我們開始編寫示例。

如何使用 NumPy linspace() 創建等間距數組

#1。 作為我們的第一個示例,讓我們在區間 [1, 5] 中創建一個由 20 個均勻分佈的數字組成的數組。

您可以將startstopnum的值指定為關鍵字參數。 這顯示在下面的代碼單元格中:

 import numpy as np arr1 = np.linspace(start = 1,stop = 5,num = 20) print(arr1) # Output: [1. 1.21052632 1.42105263 1.63157895 1.84210526 2.05263158 2.26315789 2.47368421 2.68421053 2.89473684 3.10526316 3.31578947 3.52631579 3.73684211 3.94736842 4.15789474 4.36842105 4.57894737 4.78947368 5. ]

注意數組中的數字是如何從 1 開始到 5 結束的——包括兩個端點。 此外,觀察數字(包括點 1 和 5)如何在返回的數組中表示為float

#2。 在前面的示例中,您已將startstopnum的值作為關鍵字參數傳入。 如果您以正確的順序傳入參數,您不妨將它們用作僅具有值的位置參數,如下所示。

 import numpy as np arr2 = np.linspace(1,5,20) print(arr2) # Output: [1. 1.21052632 1.42105263 1.63157895 1.84210526 2.05263158 2.26315789 2.47368421 2.68421053 2.89473684 3.10526316 3.31578947 3.52631579 3.73684211 3.94736842 4.15789474 4.36842105 4.57894737 4.78947368 5. ]

#3。 現在讓我們創建另一個數組,我們將retstep設置為True

這意味著該函數現在將返回數組和步驟。 我們可以將它們解壓縮成兩個變量arr3 :數組和step_size :返回的步長。

以下代碼單元說明瞭如何執行此操作。

 import numpy as np arr3, step_size = np.linspace(1,5,20,retstep = True) print(arr3) # Output: [1. 1.21052632 1.42105263 1.63157895 1.84210526 2.05263158 2.26315789 2.47368421 2.68421053 2.89473684 3.10526316 3.31578947 3.52631579 3.73684211 3.94736842 4.15789474 4.36842105 4.57894737 4.78947368 5. ] # Output: print(step_size) 0.21052631578947367

#4。 作為最後一個示例,讓我們將endpoint設置為False ,然後檢查會發生什麼。

 import numpy as np arr4 = np.linspace(1,5,20,endpoint = False) print(arr4) # Output: [1. 1.2 1.4 1.6 1.8 2. 2.2 2.4 2.6 2.8 3. 3.2 3.4 3.6 3.8 4. 4.2 4.4 4.6 4.8]

在返回的數組中,您可以看到包含 1,而未包含 5。 數組中的最後一個值恰好是 4.8,但我們仍然有 20 個數字。

到目前為止,我們只生成了均勻間隔的數字數組。 在下一節中,讓我們通過繪製這些數字來進行可視化。

如何在間隔中繪製均勻間隔的數字

在本節中,讓我們選擇 [10,15] 作為感興趣的區間。 然後,使用np.linspace()生成兩個數組,每個數組分別有 8 個和 12 個點。

完成後,我們可以使用matplotlib庫中的繪圖功能來繪製它們。

為清楚起見,我們將兩個數組N1 = 8N2 = 12固定在沿 y 軸的不同位置。

下面的代碼片段演示了這一點。

 import numpy as np import matplotlib.pyplot as plt N1 = 8 N2 = 12 a = 10 b = 15 y1 = np.zeros(N1) y2 = np.zeros(N2) x1 = np.linspace(a, b, N1) x2 = np.linspace(a, b, N2) plt.plot(x1, y1-0.5, 'o') plt.plot(x2, y2 + 0.5, 'o') plt.ylim([-1, 1]) plt.title(f'Evenly Spaced Numbers in the Interval [{a},{b}]') plt.xlabel('Interval') plt.show()
numpy-linspace-plot

使用數學函數時,生成均勻分佈的點會很有幫助。 我們將在下一節中了解這一點。

如何將 NumPy linspace() 與數學函數一起使用

使用np.linspace()生成一個均勻間隔的數字數組後,您可以計算區間內的數學函數的值。

在下面的代碼單元中,您首先在 0 到 2π 的區間內生成 50 個均勻分佈的點。 然後在數組x上使用np.sin()創建數組y 。 請注意,您可以跳過num參數,因為默認值為 50。我們仍將顯式使用它。

下一步,您可以在區間 [0, 2π] 中繪製正弦函數。 為此,您可以使用 matplotlib,如前面的示例所示。 具體來說, matplotlib.pytplot中的plot()函數用於創建線圖。

 import numpy as np import matplotlib.pyplot as plt N = 50 a = 0.0 b = 2*np.pi x = np.linspace(a, b, N) y = np.sin(x) plt.plot(x, y, marker = "o") plt.ylim([-1, 1]) plt.title(f'y = sin(x)') plt.xlabel('x ---->') plt.show()

現在,通過將N設置為 10 來運行上述代碼。您將得到如下圖所示的繪圖。

您可以看到情節不是很平滑——因為您只在區間中選擇了 10 個點。

通常,您考慮的點數越多,函數的繪圖就越平滑。

結論

以下是我們所學內容的摘要。

  • np.linspace(start, stop, num)返回區間[start, stop]中的num個等距數字組成的數組。
  • 將可選參數endpoint設置為False以排除stop ,並將間隔設置為[start, stop)
  • 可選擇將retstep設置為True以獲取步長。
  • 使用np.linspace()生成均勻間隔的數組,然後將數組與數學函數一起使用。

我希望您現在了解np.linspace()的工作原理。 您可以選擇在 Jupyter notebook 中運行上述示例。 查看我們的 Jupyter notebook 指南,或您可以考慮的其他 Jupyter 替代品。

很快在另一個 Python 教程中與大家見面。 在那之前,繼續編碼!