2014-03-14 91 views
1

我目前使用Python 2.7.3,sympy 0.7.1.rc1 我構建兩個矩陣是這樣的:sympy.Matrix哈希值差

import sympy as sp 

A = sp.Matrix([[0,0,1],[0,1,0],[1,0,0]]) 
B = sp.Matrix([[0,0,1],[0,1,0],[1,0,0]]) 

print A 
print B 
print A==B 
print hash(A) 
print hash(B) 

,結果是...

[0, 0, 1] 
[0, 1, 0] 
[1, 0, 0] 
[0, 0, 1] 
[0, 1, 0] 
[1, 0, 0] 
True 
3144597 
3144601 

A,B的散列值不同。我需要將這兩個矩陣放入一個set()中,但散列值不同,然後我無法做到我想要的。 這是一個sympy的bug或我應該做另一種方式?

+0

0.7.1.rc1已過時。另外,通過rc(發佈候選)來判斷,預計它不會穩定。如果升級到0.7.5,你會得到什麼? – user2357112

+2

因爲矩陣是可變的,所以我有點驚訝他們可能會開始。在主幹中,我得到了TypeError:不可更改的類型:'MutableDenseMatrix',這對我更有意義。 – DSM

+0

@ user2357112讓我試試...我只是懶惰,在ubuntu中使用默認版本 – wonghang

回答

1

正如評論者所指出的,您需要更新到更新版本的SymPy。在較老的版本中,可變矩陣是可散列的,這是不正確的。現在,hash(Matrix([[0,0,1],[0,1,0],[1,0,0]]))應該提高TypeError。如果你想要一個可排列的矩陣,使用ImmutableMatrix