我正在尝试通过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