2014-11-14 21 views
10

ndarray'un dönüştürülmüş bir sürümünü almak için .T özniteliğini kullanmak için numpy olarak çok uygundur. Bununla birlikte, konjugat transpoz elde etmek için benzer bir yolu yoktur. Numpy'nin matris sınıfı, .H operatörüne sahiptir, ancak ndarray değildir. Okunabilir kodu beğendiğim için ve her zaman .conj().T yazmak için çok tembel olduğum için, .H özelliğinin her zaman bana sunulmasını istiyorum. Bu özelliği nasıl ekleyebilirim? Numpy içe aktarıldığında her zaman beyinsizce kullanılabilir hale getirmek mümkün mü? Konjugat aktarma operatörü ".H",

(Benzer bir soru .I ters operatörü hakkında sorulan tarafından olabilir.)

cevap

6

I genel olarak, bu problemdeki zorluk, Numpy'nin, maymun yaması yapamayan bir C-uzantısı olmasıdır ... ya da olabilir mi? forbiddenfruit modülü, birisinin bıçakla oynaması gibi bir şey hissetmesine rağmen bunu yapmasına izin verir.

  1. çok basit forbiddenfruit paketini

  2. kullanıcı özelleştirme dizini belirleyin yükleyin:: Yani burada

    yaptıklarım olduğunu dizinde

    import site 
    print site.getusersitepackages() 
    
  3. , düzenleme Aşağıdakileri dahil etmek için usercustomize.py:

    from forbiddenfruit import curse 
    from numpy import ndarray 
    from numpy.linalg import inv 
    curse(ndarray,'H',property(fget=lambda A: A.conj().T)) 
    curse(ndarray,'I',property(fget=lambda A: inv(A))) 
    
  4. Testi it: içinde

    python -c python -c "import numpy as np; A = np.array([[1,1j]]); print A; print A.H" 
    

    Sonuçlar:

    [[ 1.+0.j 0.+1.j]] 
    [[ 1.-0.j] 
    [ 0.-1.j]] 
    
8

Sen gibi ndarray nesneyi alt sınıf:

from numpy import ndarray 

class myarray(ndarray):  
    @property 
    def H(self): 
     return self.conj().T 

öyle ki:

a = np.random.random((3, 3)).view(myarray) 
a.H 

verecek istenen davranış ...

+0

teşekkür, ama ben yine de her yerde ndarray kullanabileceği bir maymun yama tipi çözümü için umuyordum, örneğin A = np.random.randn (3,3) + 1j * np.random.randn (3,3); B = AHdot (A) ' – benpro

+0

@benpro Gördüm ... ama [bu daha zor olabilir] (http://docs.scipy.org/doc/numpy/user/basics.subclassing.html#implications-for- sınıflara) –