为了账号安全,请及时绑定邮箱和手机立即绑定

我应该如何评估浮点 numpy 矩阵的等效性?

我应该如何评估浮点 numpy 矩阵的等效性?

狐的传说 2021-06-15 13:09:36
在处理涉及各种逆变换的矩阵等价问题时,我发现了一些我想澄清的意外行为。我已经使所有矩阵在这里等价,因为实际的转换与我遇到的问题并不真正相关。a = np.matrix([ 1, 1], [-1, 4]])x = inv(a)y = inv(a)z = inv(a)(x == y & z).all()Note: x = matrix([ 0.8, -0.2],                 [ 0.2,  0.2]]) 它返回以下错误消息:TypeError: ufunc 'bitwise_and' not supported for the input types, and the inputs could not be safely coerced to any supported types according to the casting rule ''safe''是否因为&运算符不能与浮点一起使用而引发此错误?以下方法似乎返回正确的答案,但我会很感激为给定的问题提供首选方法的输入。(np.equal(x, y) & np.equal(y, z)).all()Truenp.equal([x,y,z], [y,z,x]).all()True
查看完整描述

2 回答

?
扬帆大鱼

TA贡献1799条经验 获得超9个赞

&按位与(参见维基百科)。似乎您想检查矩阵是否相同 - 即检查两者是否x == yx == z,在这种情况下您需要逻辑和,例如像这样:

np.logical_and(x==y, x==z).all()

或者,正如评论中的建议,您可以使用np.isclose

np.logical_and(np.isclose(x, y), np.isclose(x, z)).all()

您的两个建议有效的原因是:

  • 第一个有效,因为 False/True 被理解为 0/1,所以在这种情况下按位运算恰好等于逻辑运算。

  • 第二个建议构造从三个二维矩阵和检查平等3D矩阵作为检查x == yy == z以及z == x,但是这些中的一个是多余的。


查看完整回答
反对 回复 2021-06-16
?
侃侃尔雅

TA贡献1801条经验 获得超16个赞

按照numpy的文件bitwise_and

“仅处理整数和布尔类型。”

我怀疑这是你的TypeError.

为了检查浮点矩阵的等效性,我过去定义了可接受的误差范围,并检查两个矩阵之间的每对元素是否在该范围内。



查看完整回答
反对 回复 2021-06-16
  • 2 回答
  • 0 关注
  • 283 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号