[Numpy-discussion] add .H attribute?
Dave Hirschfeld
dave.hirschfeld at gmail.com
Wed Jul 24 04:23:09 EDT 2013
<josef.pktd <at> gmail.com> writes:
>
> I think a H is feature creep and too specialized
>
> What's .H of a int a str a bool ?
>
> It's just .T and a view, so you cannot rely that conj() makes a copy
> if you don't work with complex.
>
> .T is just a reshape function and has **nothing** to do with matrix
algebra.
>
It seems to me that that ship has already sailed - i.e. conj doesn't make
much sense for str arrays, but it still works in the sense that it's a nop
In [16]: A = asarray(list('abcdefghi')).reshape(3,3)
...: np.all(A.T == A.conj().T)
...:
Out[16]: True
If we're voting my vote goes to add the .H attribute for all the reasons
Alan has specified. Document that it returns a copy but that it may in
future return a view so it it not future proof to operate on the result
inplace.
I'm -1 on .H() as it will require code changes if it ever changes to a
property and it will simply result in questions about why .T is a property
and .H is a function (and why it's a property for (sparse) matrices)
Regarding Dag's example:
xh = x.H
x *= 2
assert np.all(2 * xh == x.H)
I'm sceptical that there's much code out there actually relying on the fact
that a transpose is a view with the specified intention of altering the
original array inplace.
I work with a lot of beginners and whenever I've seen them operate inplace
on a transpose it has been a bug in the code, leading to a discussion of
how, for performance reasons, numpy will return a view where possible,
leading to yet further discussion of when it is and isn't possible to return
a view.
The third option of .H returning a view would probably be agreeable to
everyone but I don't think we should punt on this decision for something
that if it does happen is likely years away. It seems that work on this
front is happening in different projects to numpy. Even if for example
sometime in the future numpy's internals were replaced with libdynd or other
expression graph engine surely this would result in more breaking changes
than .H returning a view rather than a copy?!
IANAD so I'm happy with whatever the consensus is I just thought I'd put
forward the view from a (specific type of) user perspective.
Regards,
Dave
More information about the NumPy-Discussion
mailing list