2014-11-14 12 views
10

का एक ट्रांसपोज़ड संस्करण प्राप्त करने के लिए .T विशेषता का उपयोग करने के लिए यह बहुत सुविधाजनक है। हालांकि, conjugate transpose प्राप्त करने के लिए कोई समान तरीका नहीं है। Numpy की मैट्रिक्स कक्षा में .H ऑपरेटर है, लेकिन ndarray नहीं है। क्योंकि मुझे पठनीय कोड पसंद है, और क्योंकि मैं हमेशा .conj().T लिखने के लिए बहुत आलसी हूं, मुझे .H संपत्ति हमेशा मेरे लिए उपलब्ध रहना चाहती है। मैं इस सुविधा को कैसे जोड़ सकता हूं? क्या इसे जोड़ना संभव है ताकि जब भी numpy आयात किया जाता है तो यह दिमागी रूप से उपलब्ध है?संदिग्ध ऑपरेटर "एच" numpy

(ऐसा ही एक सवाल .I उलटा ऑपरेटर के बारे में पूछा द्वारा सकता है।)

उत्तर

6

I एन सामान्य, इस समस्या में कठिनाई यह है कि Numpy एक सी-एक्सटेंशन है, जो बंदर पैच नहीं हो सकता ... या यह कर सकते हैं? forbiddenfruit मॉड्यूल एक ऐसा करने की अनुमति देता है, हालांकि यह चाकू के साथ खेलने जैसा थोड़ा सा लगता है।

  1. बहुत सरल forbiddenfruit पैकेज

  2. उपयोगकर्ता अनुकूलन निर्देशिका का निर्धारण स्थापित करें::

    तो यहाँ मैं क्या किया है है

    import site 
    print site.getusersitepackages() 
    
  3. कि निर्देशिका में, संपादित करें 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. टेस्ट यह: में

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

    परिणाम:

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

आप ndarray वस्तु की तरह उपवर्ग कर सकते हैं:

from numpy import ndarray 

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

ऐसी है कि:

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

आप दे देंगे वांछित व्यवहार ...

+0

धन्यवाद, लेकिन मैं एक बंदर पैचिंग प्रकार समाधान जहां मैं अभी भी हर जगह ndarray इस्तेमाल कर सकते हैं के लिए उम्मीद थी, उदा 'ए = np.random.randn (3,3) + 1j * np.random.randn (3,3); बी = एएचडॉट (ए) ' – benpro

+0

@benpro मैं देखता हूं ... लेकिन [यह ट्रिकियर होगा] (http://docs.scipy.org/doc/numpy/user/basics.subclassing.html#implications-for- उपवर्गीकरण) –

संबंधित मुद्दे