[英]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.