在處理涉及各種逆變換的矩陣等價問題時,我發現了一些我想澄清的意外行為。我已經使所有矩陣在這里等價,因為實際的轉換與我遇到的問題并不真正相關。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 == y
和x == 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 == y
,y == z
以及z == x
,但是這些中的一個是多余的。
添加回答
舉報
0/150
提交
取消