如何使用Python檢查給定的矩陣是否為馬爾可夫矩陣?


在本文中,我們將學習如何使用巢狀for迴圈和sum()函式來檢查輸入矩陣是否為馬爾可夫矩陣。在此之前,讓我們透過一個例子來了解什麼是馬爾可夫矩陣?

如果矩陣的每一行的和都等於1,則該矩陣被稱為馬爾可夫矩陣

示例

[ [ 0, 1, 0 ],
  [ 0, 0.3, 0.7 ],
  [ 0, 0, 1 ]]

在上面的例子中,每一行的和都是1。因此,上面的矩陣是馬爾可夫矩陣的一個例子。

演算法(步驟)

以下是執行所需任務的演算法/步驟。

  • 建立一個函式isMarkovMatrix(),透過接受輸入矩陣和行數作為引數來檢查輸入矩陣是否為馬爾可夫矩陣

  • 使用for迴圈遍歷矩陣的行。

  • 建立一個變數來儲存當前行的元素之和,並將其值初始化為0。

  • 使用另一個巢狀for迴圈,使用len()函式(返回物件中的專案數)遍歷當前行的所有列。

  • 透過將上面的當前行和與當前元素相加來獲取當前行的和。

  • 使用if條件語句檢查當前行的和是否不等於1。

  • 如果條件為真,即當前行的和不等於1,則返回false

  • 否則返回True。

  • 建立一個變數來儲存輸入矩陣

  • 透過將輸入矩陣和行數作為引數傳遞給它,呼叫上面的isMarkovMatrix()函式,並使用if條件語句檢查函式是否返回true。

  • 如果條件為真,則列印輸入矩陣是馬爾可夫矩陣。

  • 否則列印輸入矩陣不是馬爾可夫矩陣。

示例

下面的程式中,該函式迭代矩陣的每一行,計算其元素的和。如果任何一行的和不等於1,則該函式返回False,表示該矩陣不是馬爾可夫矩陣。如果所有行都通過了和檢查,則該函式返回True,確認該矩陣滿足馬爾可夫屬性。

# creating a function to check whether the input matrix
# is a Markov matrix by accepting input matrix as an argument
def isMarkovMatrix(inputMatrix):
    #  traversing through the rows of a matrix
    for p in range(0, len(inputMatrix)):
        # Taking a variable to store the sum of elements of current row
        currentrow_sum = 0
        # traversing through all the columns of a current row
        for q in range(0, len(inputMatrix[p])):
            #  getting the sum of current row
            currentrow_sum = currentrow_sum + inputMatrix[p][q]
        # checking whether the sum of current row is not equal to 1
        if (currentrow_sum != 1):
            # returning false if sum is not equal to 1
            return False
    # else returning True
    return True
# input matrix
inputMatrix = [[0, 1, 0],
               [0, 0.3, 0.7],
               [0, 0, 1]]

if (isMarkovMatrix(inputMatrix)):
  # printing Markov matrix it function returns true
    print("The input matrix is a Markov matrix")
else:
  # else printing Not a Markov matrix
    print("The input matrix is Not a Markov matrix")

輸出

執行上述程式後,將生成以下輸出

The input matrix is a Markov matrix

方法2:使用sum()函式

演算法(步驟)

以下是執行所需任務的演算法/步驟:

  • 定義一個名為isMarkovMatrix的函式,該函式將輸入矩陣作為引數。

  • 使用for迴圈遍歷矩陣的每一行。

  • 初始化一個變數currentrow_sum來儲存當前行中元素的和。

  • 在巢狀迴圈中,遍歷當前行的每一列。

  • 將當前行和列處的元素新增到currentrow_sum。

  • 內部迴圈完成後,檢查currentrow_sum是否不等於1。

  • 如果和不等於1,則返回False,表示該矩陣不是馬爾可夫矩陣。

  • 如果所有行都通過了和檢查,則返回True,表示該矩陣是馬爾可夫矩陣。

  • 使用二維列表建立一個輸入矩陣。

  • 使用輸入矩陣作為引數呼叫isMarkovMatrix函式。

  • 使用if-else語句檢查函式的返回值。

  • 如果函式返回True,則列印“輸入矩陣是馬爾可夫矩陣”。

  • 如果函式返回False,則列印“輸入矩陣不是馬爾可夫矩陣”。

示例

下面的程式使用sum函式檢查輸入矩陣是否為馬爾可夫矩陣

def isMarkovMatrix(inputMatrix):
    for row in inputMatrix:
        rowSum = sum(row)
        if rowSum != 1:
            return False
    return True

# Input matrix
inputMatrix = [[0, 1, 0],
               [0, 0.3, 0.7],
               [0, 0, 1]]

if isMarkovMatrix(inputMatrix):
    print("The input matrix is a Markov matrix")
else:
    print("The input matrix is not a Markov matrix")

輸出

The input matrix is a Markov matrix

結論

總之,上面介紹的Python程式提供了兩種不同的方法來檢查輸入矩陣是否為馬爾可夫矩陣。第一種方法使用巢狀for迴圈迭代矩陣並計算每一行的和,而第二種方法使用sum()函式計算行和。兩種方法都產生相同的結果,都可以用來確定矩陣是否滿足馬爾可夫屬性。這些程式為驗證馬爾可夫矩陣提供了一種實用的方法,可以應用於涉及機率和隨機過程的各個領域。

更新於:2023年8月17日

瀏覽量:144

啟動您的職業生涯

透過完成課程獲得認證

開始
廣告