簡體   English   中英

如果沒有 NumPy,我應該如何將兩個向量或矩陣相減?

[英]How should I subtract two vectors or matrices from each other without NumPy?

我有一個 function 從另一個相同形狀的矩陣(假設是相同大小的嵌套列表)中減去一個形狀的矩陣(嵌套列表):

def subtract(matrix_a, matrix_b):
    MATRIX_LENGTH = len(matrix_a)
    MATRIX_ROW = len(matrix_a[0])
    for i in range(MATRIX_LENGTH):
      for j in range(MATRIX_ROW):
        matrix_a[i][j] -= matrix_b[i][j]
    return matrix_a

上面的function遍歷matrix_a的每個值,在返回matrix_a之前從matrix_a中減去matrix_b的相同position的值。

如果我提供向量(“未”嵌套列表),此代碼將不起作用。 例如,分別向 matrix_a 和 matrix_b 提供 [1, 2, 3, 4] 和 [2, 3, 4, 5] 將產生TypeError: object of type 'int' has no len()

我應該如何修改 function 以接受“未”嵌套列表? 出於教育目的,我不想使用 NumPy。

提前致謝。

感謝@LarrytheLlama,我想到了使用 try/except/else 語句來捕獲 TypeError。 以下代碼在沒有 NumPy 的情況下將兩個向量或矩陣相減:

def subtract(matrix_a, matrix_b):
  MATRIX_LENGTH = len(matrix_a)
  try:
    MATRIX_ROW = len(matrix_a[0])
  except TypeError:
    for i in range(MATRIX_LENGTH):
      matrix_a[i] -= matrix_b[i]
  else:
    for i in range(MATRIX_LENGTH):
      for j in range(MATRIX_ROW):
        matrix_a[i][j] -= matrix_b[i][j]
  return matrix_a

您可以使用 zip 在列表理解中配對值/行,並為嵌套維度遞歸調用 function:

def subtract(A,B):
     if isinstance(A,list):
         return [ subtract(ra,rb) for ra,rb in zip(A,B) ]
     else:
         return A-B

這適用於任意數量的維度

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM