Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/mercurial/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 含无穷元素的矩阵乘法_Python_Numpy_Matrix Multiplication_Infinity - Fatal编程技术网

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?