繁体   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