python – Conjugate transpose operator .H in numpy

python – Conjugate transpose operator .H in numpy

You can subclass the ndarray object like:

from numpy import ndarray

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

such that:

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

will give you the desired behavior.

In general, the difficulty in this problem is that Numpy is a C-extension, which cannot be monkey patched…or can it? The forbiddenfruit module allows one to do this, although it feels a little like playing with knives.

So here is what Ive done:

  1. Install the very simple forbiddenfruit package

  2. Determine the user customization directory:

    import site
    print site.getusersitepackages()
    
  3. In that directory, edit usercustomize.py to include the following:

    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. Test it:

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

    Results in:

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

python – Conjugate transpose operator .H in numpy

Use arr.conj().T

Here is an example

ZeroKet = np.array([[1j], [-2j]])
ZeroBra = Zero.conj().T

Leave a Reply

Your email address will not be published.