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.
Edit:
As suggested by @slek120, you can force to transpose only the last 2 axes with:
self.swapaxes(-2, -1).conj()
instead of self.conj().T
.
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 I've done:
Install the very simple forbiddenfruit package
Determine the user customization directory:
import site print site.getusersitepackages()
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)))
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]]