矩陣是一個二維的數據集合。 我們將矩陣表示為列表的列表,每個內部列表的大小都一
樣,表示矩陣的一行。如果 A 是一個矩陣,那么 A[i][j] 就表示第 i 行第 j 列的元素。按照
數學表達的慣例,我們通常用大寫字母表示矩陣。例如:
A = [[1, 2, 3], # A有2行3列
[4, 5, 6]]
B = [[1, 2], # B有3行2列
[3, 4],
[5, 6]]
在數學中,矩陣的第一行通常稱為“第 1 行”,第一列通常稱為“第 1 列”。
而我們需要將矩陣的形式和 Python 的列表統(tǒng)一起來: Python 中的列表從 0
開始索引,所以,我們將矩陣的第一行稱為“第 0 行”,將第一列稱為“第
0 列”。
基于列表的列表這種表達形式,矩陣 A 具有 len(A) 行和 len(A[0]) 列,我們把這稱作它的
形狀(shape):
def shape(A):
num_rows = len(A)
num_cols = len(A[0]) if A else 0 # 第一行中元素的個數
return num_rows, num_cols
如果一個矩陣有 n 行 k 列,則可以記為 n×k 矩陣。我們可以把這個 n×k 矩陣的每一行都
當作一個長度為 k 的向量,把每一列都當作一個長度為 n 的向量:
def get_row(A, i):
return A[i] # A[i]是第i行
def get_column(A, j):
return [A_i[j] # 第A_i行的第j個元素
for A_i in A] # 對每個A_i行
同樣,我們也可以根據形狀和用來生成元素的函數來創(chuàng)建矩陣??梢酝ㄟ^一個嵌套的列表
解析來實現
def make_matrix(num_rows, num_cols, entry_fn):
"""returns a num_rows x num_cols matrix
whose (i,j)th entry is entry_fn(i, j)"""
return [[entry_fn(i, j) # 根據i創(chuàng)建一個列表
for j in range(num_cols)] # [entry_fn(i, 0), ... ]
for i in range(num_rows)] # 為每一個i創(chuàng)建一個列表
有了這個函數,就可以生成一個 5×5 的單位矩陣(對角線元素是 1,其他元素是 0) :
def is_diagonal(i, j):
"""1's on the 'diagonal', 0's everywhere else"""
return 1 if i == j else 0
identity_matrix = make_matrix(5, 5, is_diagonal)
# [[1, 0, 0, 0, 0],
# [0, 1, 0, 0, 0],
# [0, 0, 1, 0, 0],
# [0, 0, 0, 1, 0],
# [0, 0, 0, 0, 1]]








暫無數據