2011-03-16 129 views
12

是否有更好的pythonic方法來檢查ndarray是否在特定維度上是對角對稱的?即對於所有的x的測試numpy數組是否對稱?

(arr[:,:,x].T==arr[:,:,x]).all() 

我敢肯定,我錯過了(杜)的答案,但在這裏它的2:15 ... :)

編輯:爲了澄清,我正在尋找更多的「優雅」的方式來做到:

for x in range(xmax): 
    assert (arr[:,:,x].T==arr[:,:,x]).all() 
+2

我認爲你的方法是完全合理的,我想不出一個內置函數來測試對稱性,以更簡潔/有效的方式做到這一點。 – JoshAdel 2011-03-16 03:07:39

回答

18

如果我理解正確的話,你想要做的檢查

all((arr[:,:,x].T==arr[:,:,x]).all() for x in range(arr.shape[2])) 

沒有Python的循環。這裏是如何做到這一點:

(arr.transpose(1, 0, 2) == arr).all() 
12

如果陣列包含花車(特別是如果他們是一個計算的結果),使用allclose

np.allclose(arr.transpose(1, 0, 2), arr) 

如果一些值可能是NaN,在測試之前將它們設置爲標記值。

arr[np.isnan(arr)] = 0 
+0

錯字(括號而不是括號):arr [np.isnan(arr)] = 0 – Picarus 2014-04-27 11:29:00

+0

@Picarus謝謝。修復。 :) – 2014-04-27 13:34:29

+0

如果我沒有弄錯,'np.transpose'不應該改變它們的值,只能改變它們的位置,所以它們應該是相等的。 – moi 2016-06-28 20:43:17