NumPy 陣列除法



NumPy 陣列除法

NumPy 陣列除法是指對兩個陣列進行逐元素除法的過程。在此上下文中,逐元素除法意味著一個數組中的每個元素都除以另一個數組中對應的元素。

此操作支援廣播,允許對不同形狀的陣列進行除法。此外,可以在陣列和標量之間執行除法,這將相應地縮放陣列的每個元素。

NumPy 中的逐元素除法

NumPy 中的逐元素除法是指將一個數組的每個元素除以另一個數組中對應的元素。此操作逐元素執行,這意味著除法在兩個陣列中相同位置的元素之間成對發生。

為了使逐元素除法能夠工作,兩個陣列必須具有相同的形狀,或者它們必須能夠廣播到一個公共形狀。

在 NumPy 中,除法運算子 / 用於執行逐元素除法。如果陣列具有不同的形狀但對於廣播是相容的,NumPy 將自動應用廣播規則來執行除法。

示例

在下面的示例中,我們將陣列 a 的每個元素除以陣列 b 中對應的元素:

import numpy as np

# Creating two arrays
a = np.array([10, 20, 30])
b = np.array([2, 5, 10])

# Performing element-wise division
result = a / b
print(result)

以下是獲得的輸出:

[5. 4. 3.]

NumPy 中的標量除法

NumPy 中的標量除法是指將陣列的每個元素除以單個標量值。此操作將除法應用於陣列的每個元素,從而產生一個新陣列,其中每個元素都除以標量。

示例

在這個例子中,我們將陣列“a”的每個元素除以標量“10”:

import numpy as np

# Creating an array
a = np.array([10, 20, 30])

# Dividing by a scalar
result = a / 10
print(result)

這將產生以下結果:

[1. 2. 3.]

陣列除法中的廣播

廣播允許對不同形狀的陣列進行運算。當對不同形狀的陣列執行除法時,NumPy 會自動調整形狀以便可以執行該運算。

在執行陣列除法時,廣播允許您透過自動沿缺失維度擴充套件較小的陣列以匹配較大陣列的形狀來除不同大小或形狀的陣列。

這種擴充套件以允許逐元素運算(如除法)在不顯式複製資料的情況下執行的方式進行。

示例

在下面的示例中,陣列“b”被廣播以匹配陣列“a”的形狀,然後執行逐元素除法:

import numpy as np

# Creating arrays with different shapes
a = np.array([[10, 20, 30], [40, 50, 60]])
b = np.array([10, 5, 2])

# Performing division with broadcasting
result = a / b
print(result)

以下是上述程式碼的輸出:

[[ 1.  4. 15.]
 [ 4. 10. 30.]]

處理除以零

在 NumPy 中執行除法運算時,一個常見問題是可能除以零,這可能導致未定義或無限的結果。NumPy 提供了處理此類情況的方法,可以透過返回特殊值(如 inf 或 nan)或根據具體用例引發警告或錯誤來實現。

  • 正/負無窮大 (inf 或 -inf) − 當正數或負數除以零時返回。
  • 非數字 (nan) − 當零除以零時返回。

示例:基本的除以零

讓我們看看 NumPy 如何處理簡單的除以零:

import numpy as np

# Creating an array with a zero element
array = np.array([10, 0, -5])

# Dividing a constant by the array
result = 100 / array
print(result)

NumPy 不會引發錯誤,而是返回除以零的“inf”:

/home/cg/root/66c57b63ef7f5/main.py:7: RuntimeWarning: divide by zero encountered in divide
  result = 100 / array
[ 10.  inf -20.]

示例:使用 errstate() 函式處理除以零

您可以使用 np.errstate() 函式控制 NumPy 如何處理除以零。此函式允許您指定是否忽略、警告或為浮點錯誤(如除以零)引發錯誤:

import numpy as np

# Creating an array with a zero element
array = np.array([10, 0, -5])

with np.errstate(divide='ignore', invalid='ignore'):
   result = 100 / array
   print(result)

在這裡,我們將 errstate() 函式中的“divide”引數設定為“ignore”以忽略通常在除以零時出現的警告。結果仍然包含“inf”,但沒有任何中斷或警告:

/home/cg/root/66c57b63ef7f5/main.py:7: RuntimeWarning: divide by zero encountered in divide
  result = 100 / array
[ 10.  inf -20.]

示例:處理 nan 值

當零除以零時,結果為 nan(非數字)。此特殊值用於表示浮點計算中未定義或無法表示的值:

import numpy as np

# Creating arrays with zero elements
numerator = np.array([0, 1, 2])
denominator = np.array([0, 0, 2])

# Performing division
result = numerator / denominator
print(result)

產生的結果如下:

[ 10.  inf -20.]

不同資料型別的除法

當對不同資料型別的陣列執行除法時,NumPy 會自動將資料型別提升到可以安全地包含結果的公共型別。

例如,如果您將整數陣列除以浮點陣列,則結果將是浮點陣列。這種型別提升可以防止資料丟失並確保結果的精度。

示例

在此示例中,NumPy 在執行除法之前將整數陣列 a 提升為浮點型別以匹配陣列 b 的資料型別:

import numpy as np

# Creating arrays with different data types
a = np.array([10, 20, 30], dtype=np.int32)
b = np.array([2.5, 5.0, 10.0], dtype=np.float64)

# Performing division
result = a / b
print(result)

我們得到如下所示的輸出:

[4. 4. 3.]

NumPy 中的矩陣除法

矩陣除法不像逐元素除法或標量除法那樣簡單。但是,您可以使用 NumPy 中矩陣的逆矩陣進行矩陣乘法來解決類似矩陣除法的運算。

示例

在此示例中,我們使用矩陣 B 的逆矩陣在 NumPy 中執行類似除法的運算:

import numpy as np

# Creating a matrix
A = np.array([[1, 2], [3, 4]])

# Creating another matrix
B = np.array([[2, 0], [1, 3]])

# Solving the matrix division A/B
# Equivalent to A * B^-1
result = np.dot(A, np.linalg.inv(B))
print(result)

以下是獲得的輸出:

[[0.16666667 0.66666667]
 [0.83333333 1.33333333]]

處理除法中的維度不匹配

當在 NumPy 中對陣列執行除法運算時,如果陣列不共享相容的形狀,則可能會發生維度不匹配。NumPy 透過廣播來解決此問題,並在這種情況下引發 ValueError

示例

在下面的示例中,“a”和“b”的形狀對於廣播不相容,導致錯誤:

import numpy as np

# Creating arrays with incompatible shapes
a = np.array([1, 2, 3])
b = np.array([[1, 2], [3, 4]])

# Attempting to divide incompatible arrays
result = a / b
print(result)

產生的結果如下:

Traceback (most recent call last):
File "/home/cg/root/66c57b63ef7f5/main.py", line 8, in <module>
   result = a / b
ValueError: operands could not be broadcast together with shapes (3,) (2,2) 
廣告