2011-03-16 36 views
12

Belirli bir boyutta bir ndarrayın çapraz simetrik olup olmadığını kontrol etmenin daha iyi bir pythonik yolu var mı? yani x tümü içinBir numpy dizisi simetrik olup olmadığını sınama?

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

Ben bir (yaa) cevabı ancak burada onun 2:15 ... :)

DÜZENLEME eksik eminim: netleştirmek için, ben arıyorum bir daha 'şık' yolu yapmak: Ben doğru anlamak

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

Yönteminizin mükemmel bir şekilde mantıklı olduğunu düşünüyorum ve simetriyi daha kısa/verimli bir şekilde yapacak olan yerleşik bir işlevi düşünemiyorum. – JoshAdel

cevap

18

, Python döngü olmadan çeki

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

yapmak istiyorum. İşte bunu nasıl şudur: array (bir hesaplama sonucu özellikle eğer) yüzer içeren

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

Eğer değerlerinden bazılarını NaN olabilir Eğer allclose

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

kullanın Bunları testten önce bir marker değerine ayarlayın.

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

yazım hatası (parantez yerine parantez): arr [np.isnan (arr)] = 0 – Picarus

+0

@Picarus Teşekkürler. Onu düzeltti. :) –

+0

Yanılmıyorsam, 'np.transpose' değerleri değiştirmemeli, sadece kendi pozisyonlarını değiştirmeli, bu yüzden gerçekten eşit olmalıdırlar. – moi

İlgili konular