NumPy - 從數值範圍建立陣列



NumPy 中從數值範圍建立陣列

在 NumPy 中從數值範圍建立陣列是指生成包含指定範圍內的數字序列的陣列。NumPy 提供了幾個函式來建立這樣的陣列,如下所示:

  • 使用 numpy.arange() 函式
  • 使用 numpy.linspace() 函式
  • 使用 numpy.logspace() 函式
  • 使用 numpy.meshgrid() 函式

使用 numpy.arange() 函式

numpy.arange() 函式透過根據指定的起始值、終止值和步長值生成數字序列來建立陣列。它類似於 Python 的內建 range() 函式,但返回的是 NumPy 陣列。以下是語法:

numpy.arange([start, ]stop, [step, ]dtype=None, *, like=None)

其中:

  • start (可選) - 區間的起始值。預設為 0。

  • stop - 區間的結束值(不包含)。

  • step (可選) - 值之間的間隔。預設為 1。

  • dtype (可選) - 陣列所需的資料型別。如果沒有給出,NumPy 將根據輸入值解釋資料型別。

示例:基本用法

在下面的示例中,我們使用 numpy.arange() 函式生成從 0 到 10(不包含 10)的陣列:

import numpy as np

# Create an array from 0 to 9
arr = np.arange(10)
print("Array using arange():", arr)

獲得以下輸出:

Array using arange(): [0 1 2 3 4 5 6 7 8 9]

示例:指定起始值、終止值和步長

在這裡,我們使用 numpy.arange() 函式生成從 1 到 10(不包含 10),步長為 2 的陣列:

import numpy as np

# Create an array from 1 to 9 with a step of 2
arr = np.arange(1, 10, 2)
print("Array with start, stop, and step:", arr)

這將產生以下結果:

Array with start, stop, and step: [1 3 5 7 9]

使用 numpy.linspace() 函式

numpy.linspace() 函式在一個指定區間內生成具有均勻間隔值的陣列。當您需要兩個值之間特定數量的點時,此函式很有用。

此函式類似於 arange() 函式。在這個函式中,指定區間內均勻間隔值的個數,而不是步長。以下是語法:

numpy.linspace(start, stop, num=50, endpoint=True, retstep=False, dtype=None, axis=0)

其中:

  • start - 區間的起始值。

  • stop - 區間的結束值。

  • num (可選) - 要生成的均勻間隔樣本數。預設為 50。

  • endpoint (可選) - 如果為 True,則 stop 是最後一個樣本。如果為 False,則不包含。預設為 True。

  • retstep (可選) - 如果為 True,則返回 (samples, step),其中 step 是樣本之間的間距。預設為 False。

  • dtype (可選) - 陣列所需的資料型別。如果沒有給出,NumPy 將根據輸入值解釋資料型別。

  • axis (可選) - 結果中儲存樣本的軸。預設為 0。

示例:基本用法

在這個示例中,我們使用 numpy.linspace() 函式生成一個從 0 到 1(預設情況下包含 1)的 10 個均勻間隔值的陣列:

import numpy as np

# Create an array of 10 evenly spaced values from 0 to 1
arr = np.linspace(0, 1, 10)
print("Array using linspace():", arr)

以上程式碼的輸出如下:

Array using linspace(): [0.         0.11111111 0.22222222 0.33333333 0.44444444 0.55555556
 0.66666667 0.77777778 0.88888889 1.        ]

示例:排除端點

在這裡,我們使用 numpy.linspace() 函式生成一個從 0 到略小於 1 的 10 個均勻間隔值的陣列,不包括端點:

import numpy as np

# Create an array 
arr = np.linspace(0, 1, 10, endpoint=False)
print("Array with endpoint=False:", arr)

獲得的輸出如下所示:

Array with endpoint=False: [0.  0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9]

示例:返回步長

現在,我們生成一個從 0 到 1(預設情況下包含 1)的 10 個均勻間隔值的陣列,並返回步長:

import numpy as np

# Create an array 
arr, step = np.linspace(0, 1, 10, retstep=True)
print("Array with step size:", arr)
print("Step size:", step)

執行以上程式碼後,我們得到以下輸出:

Array with step size: [0.         0.11111111 0.22222222 0.33333333 0.44444444 0.55555556
 0.66666667 0.77777778 0.88888889 1.        ]
Step size: 0.1111111111111111

使用 numpy.logspace() 函式

numpy.logspace() 函式生成一個數組,其值在對數尺度上均勻分佈。這對於生成跨越幾個數量級的數值非常有用。以下是語法:

numpy.logspace(start, stop, num=50, endpoint=True, base=10.0, dtype=None, axis=0)

其中:

  • start - 序列的起始值(作為底數的冪)。

  • stop - 序列的結束值(作為底數的冪)。

  • num (可選) - 要生成的樣本數。預設為 50。

  • endpoint (可選) - 如果為 True,則 stop 是最後一個樣本。如果為 False,則不包含。預設為 True。

  • base (可選) - 對數空間的底數。預設為 10.0。

  • dtype (可選) - 陣列所需的資料型別。如果沒有給出,NumPy 將根據輸入值解釋資料型別。

  • axis (可選) - 結果中儲存樣本的軸。預設為 0。

示例

在下面的示例中,我們使用 numpy.logspace() 函式生成一個在對數尺度上從 21 到 210 均勻分佈的 10 個值的陣列,底數為 2:

import numpy as np

# Create an array 
arr = np.logspace(1, 10, 10, base=2)
print("Array with base 2:", arr)

我們得到以下輸出:

Array with base 2: [   2.    4.    8.   16.   32.   64.  128.  256.  512. 1024.]

使用 numpy.meshgrid() 函式

numpy.meshgrid() 函式根據座標向量生成座標矩陣。這對於建立用於在 2D 或 3D 空間中評估函式的點網格非常有用。以下是語法:

numpy.meshgrid(*xi, copy=True, sparse=False, indexing='xy')

其中:

  • *xi - 表示網格座標的 1D 陣列。

  • copy (可選) - 如果為 True,則建立輸入陣列的副本。預設為 True。

  • sparse (可選) - 如果為 True,則返回稀疏網格以節省記憶體。預設為 False。

  • indexing (可選) - 指定笛卡爾 ('xy',預設)或矩陣 ('ij') 索引約定。

示例:建立 2D 網格

在下面的示例中,我們使用 numpy.meshgrid() 函式根據 1D 陣列 "x" 和 "y" 生成座標矩陣 "X" 和 "Y",其中 X 表示 2D 網格的 x 座標,Y 表示 y 座標:

import numpy as np

# Create 1D arrays for x and y coordinates
x = np.arange(1, 4)
y = np.arange(1, 3)

# Generate coordinate matrices
X, Y = np.meshgrid(x, y)

print("X grid:")
print(X)
print("Y grid:")
print(Y)

獲得以下輸出:

X grid:
[[1 2 3]
 [1 2 3]]
Y grid:
[[1 1 1]
 [2 2 2]]

示例:建立 3D 網格

現在,我們使用矩陣索引 ('ij') 為 3D 網格從 1D 陣列 x、y 和 z 生成座標矩陣 X、Y 和 Z:

import numpy as np

# Create 1D arrays for x, y, and z coordinates
x = np.arange(1, 4)
y = np.arange(1, 3)
z = np.arange(1, 3)

# Generate coordinate matrices
X, Y, Z = np.meshgrid(x, y, z, indexing='ij')

print("X grid:")
print(X)
print("Y grid:")
print(Y)
print("Z grid:")
print(Z)

執行以上程式碼後,我們得到以下輸出:

X grid:
[[[1 1]
  [1 1]]

 [[2 2]
  [2 2]]

 [[3 3]
  [3 3]]]
Y grid:
[[[1 1]
  [2 2]]

 [[1 1]
  [2 2]]

 [[1 1]
  [2 2]]]
Z grid:
[[[1 2]
  [1 2]]

 [[1 2]
  [1 2]]

 [[1 2]
  [1 2]]]
廣告