矩阵逆广播



我正在尝试通过Numpy广播计算Rij = Aij * Bij/Cij

B1 * np.linalg.inv(C1)给出一个奇异矩阵误差。

我也试过这样做。它给了我一些值,但我不太确定它是否正确。D = B1 / C1[..., None]

import numpy as np
from numpy.linalg import inv

A = [[(i+j)/2000 for i in range(500)] for j in range(500)]
B = [[(i-j)/2000 for i in range(500)] for j in range(500)]
C = [[((i+1)/(j+1))/2000 for i in range(500)] for j in range(500)]

def numpy_task3_part_A(A,B,C):
A1 = np.array(A)
B1 = np.array(B)
C1 = np.array(C)
D = B1 / C1[..., None]
Rij = A1 @ D
return Rij

A1 = np.array(A)
B1 = np.array(B)
C1 = np.array(C)
print(C1.shape)
print(B1.shape)
print(A1.shape)
numpy_task3_part_A(A,B,C)

如何解决这个问题?

如果你想做元素矩阵乘法和除法,一般的*/运算符做元素运算。

numpy@算子做的是任何代数课程都学过的矩阵乘积,除以矩阵的inv实际上是计算矩阵的逆,这不是一个元素的除法。

你只需要这样做。

R = A * B / C

最新更新