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] 中具有特定數量的均勻間隔點。

我們在 [0,1] 中的 4 個均勻分佈的點的第一個示例非常簡單。 你知道點之間的步長應該是 0.25。
假設您有一個稍微複雜的示例——您必須在 1 到 33 之間列出 7 個均勻分佈的點。在這裡,步長可能不是很清楚。 但是,在這種情況下,您可以手動計算step
的值。
但是, np.linspace()
在這裡可以讓您更簡單!

使用np.linspace()
時,您只需要指定區間中的點數 - 而無需擔心步長。 您將根據需要取回數組。
帶著這個動機,讓我們在下一節繼續學習 NumPy linspace()
的語法。
NumPy linspace() 的語法
使用 NumPy linspace()
的語法如下所示:
np.linspace(start, stop, num, endpoint, retstep, dtype, axis)
一開始,上面的語法可能看起來很複雜,有很多參數。
但是,它們中的大多數是可選參數,我們將在幾分鐘內得出一個更簡單的語法。
現在讓我們從解析上面的語法開始:
-
start
和stop
分別是區間的起點和終點。 start 和 stop 都可以是標量或數組。 在本教程中,我們將限制為標量開始值和結束值。 -
num
是均勻分佈的點的數量。 它是一個可選參數,默認值為 50。 -
endpoint
也是一個可選參數,可以是 True 或 False。 - 默認值為 True,表示默認情況下將終點包含在區間中。 但是,您可以將其設置為 False 以排除端點。
-
retstep
是另一個可選參數,它採用布爾值 True 或 False。 設置為 True 時,返回步長值。 -
dtype
是數組中數字的數據類型。 該類型通常被推斷為 float 並且不需要顯式提供。 -
axis
是另一個可選參數,表示應沿其存儲數字的軸。 這僅在start
和stop
值本身是數組時才相關。
️ 那麼np.linspace()
返回什麼?
它返回一個由均勻分佈的數字組成的 N 維數組。 如果參數retstep
設置為True
,它也會返回步長。
根據到目前為止的討論,這是使用np.linspace()
的簡化語法:
np.linspace(start, stop, num)
上面的代碼行將返回一個間隔為
[start, stop]
的num
個等距數字組成的數組。
現在您已經了解了語法,讓我們開始編寫示例。
如何使用 NumPy linspace() 創建等間距數組
#1。 作為我們的第一個示例,讓我們在區間 [1, 5] 中創建一個由 20 個均勻分佈的數字組成的數組。
您可以將start
、 stop
和num
的值指定為關鍵字參數。 這顯示在下面的代碼單元格中:
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。 在前面的示例中,您已將start
、 stop
和num
的值作為關鍵字參數傳入。 如果您以正確的順序傳入參數,您不妨將它們用作僅具有值的位置參數,如下所示。
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 = 8和N2 = 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() 與數學函數一起使用
使用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 教程中與大家見面。 在那之前,繼續編碼!