python - 与包含无穷大的元素的矩阵乘法
问题描述
说,我们有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 * infinity 是未定义的,这就是为什么[nan, nan, nan, nan]
当你做A.dot(b)
.
矩阵和向量的点积只是它们的元素乘积,在第二个轴上求和。所以,
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.]])
最后,在第二个轴上求和
result = X.sum(axis=1)
print(result)
输出:
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)
推荐阅读
- mysql - 连接到 MySQL 的正确方法是什么?
- angular - routerlink中间的Angular 6查询参数
- java - 如何在没有 JCL 的情况下使用 SAS (WPS) 运行 Java 代码
- java - 在Scala中创建具有任意类型和映射的三维数组
- keycloak - Keycloak:如何将 Keycloak 用户自动重定向到 OKTA SSO 页面而不是单击按钮?
- python - python - lxml - 如何优雅地标记文本中的单词?
- android - 接收器不兼容,需要地图!(安卓问题)
- ios - 如何启用 MPMediaItemArtwork 下一个/上一个按钮?
- firebase - Firebase/MLVisionTextModel 未通过 Pod iOS 安装
- javascript - 与弧的碰撞