Python 含无穷元素的矩阵乘法
比如说,我们有Python 含无穷元素的矩阵乘法,python,numpy,matrix-multiplication,infinity,Python,Numpy,Matrix Multiplication,Infinity,比如说,我们有A=np.array([[0,0,1,2],[1,2,0,0],[0,1,2,0],[1,0,2,0]]) 并且,b=np.array([1,-inf,1,-inf]) 如何获得此输出:A.dot(b)=[-inf,-inf,-inf,3]?0*无限是未定义的,这就是为什么在执行A.dot(b)时获得[nan,nan,nan,nan] 矩阵和向量的点积就是它们的元素积,在第二个轴上求和。所以 A=np.array([[0, 0, 1, 2], [1, 2, 0, 0], [0, 1
A=np.array([[0,0,1,2],[1,2,0,0],[0,1,2,0],[1,0,2,0]])
并且,b=np.array([1,-inf,1,-inf])
如何获得此输出:
A.dot(b)=[-inf,-inf,-inf,3]
?0*无限是未定义的,这就是为什么在执行A.dot(b)
时获得[nan,nan,nan,nan]
矩阵和向量的点积就是它们的元素积,在第二个轴上求和。所以
A=np.array([[0, 0, 1, 2], [1, 2, 0, 0], [0, 1, 2, 0], [1, 0, 2, 0]])
b=np.array([1, -np.inf, 1, -np.inf])
X = A * b
print(X)
这给了我们:
array([[ 0., nan, 1., -inf],
[ 1., -inf, 0., nan],
[ 0., -inf, 2., nan],
[ 1., nan, 2., nan]])
现在,我们知道nan
值是0
与np.inf
相乘的结果。因此,我们可以将它们替换为0
X[np.isnan(X)] = 0
print(X)
输出:
array([[ 0., 0., 1., -inf],
[ 1., -inf, 0., 0.],
[ 0., -inf, 2., 0.],
[ 1., 0., 2., 0.]])
array([-inf, -inf, -inf, 3.])
最后,在第二个轴上求和
result = X.sum(axis=1)
print(result)
输出:
array([[ 0., 0., 1., -inf],
[ 1., -inf, 0., 0.],
[ 0., -inf, 2., 0.],
[ 1., 0., 2., 0.]])
array([-inf, -inf, -inf, 3.])
作为单一功能:
def dotinf(A, b):
X = A * b
X[np.isnan(X)] = 0
return X.sum(axis=1)
P=np.array([[0, 0, 1, 2], [1, 2, 0, 0], [0, 1, 2, 0], [1, 0, 2, 0]])
q=np.array([1, -np.inf, 1, -np.inf])
r = dotinf(P, q)
0*无限是未定义的,这就是为什么您得到
[nan,nan,nan,nan]
@PranavHosangadi如何定义0*无限=0?