I was saying we shouldn't change the default transpose operation to be conjugate transpose. We don't currently have a conjugate transpose so it isn't an issue. I think having a conjugate transpose is a great idea, I just don't think it should be the default.
On Tue, Jun 25, 2019 at 12:12 PM Ilhan Polat <ilhanpo...@gmail.com> wrote: > I think we would have seen a lot of evidence in the last four decades if > this was that problematic. > > You are the second person to memtion these bugs. Care to show me some > examples of these bugs? > > Maybe I am missing the point here. I haven't seen any bugs because > somebody thought they are just transposing. > > Using transpose to reshape an array is a different story. That we can > discuss. > > On Tue, Jun 25, 2019, 16:10 Todd <toddr...@gmail.com> wrote: > >> That is how it is in your field, but not mine. For us we only use the >> conventional transpose, even for complex numbers. And I routinely see bugs >> in MATLAB because of its choice of defaults, and there are probably many >> more that don't get caught because they happen silently. >> >> I think the principle of least surprise should apply here. For people >> who need the conjugate transform the know to make sure they use the right >> operation. But a lot of people aren't even aware that there conjugate >> transpose exists, they are just going to copy what they see in the examples >> without realizing it does the completely wrong thing in certain cases. >> They wouldn't bother to check because they don't even know there is a >> second transpose operation they need to look out for. So it would hurt a >> lot of people without helping anyone. >> >> On Tue, Jun 25, 2019, 07:03 Ilhan Polat <ilhanpo...@gmail.com> wrote: >> >>> I have to disagree, I hardly ever saw such bugs and moreover <Zbar, Z> >>> is not compatible if you don't also transpose it but expected in almost all >>> contexts of matrices, vectors and scalars. Elementwise conjugation is well >>> inline with other elementwise operations starting with a dot in matlab >>> hence still consistent. >>> >>> I would still expect an conjugation+transposition to be the default >>> since just transposing a complex array is way more special and rare than >>> its ubiquitous regular usage. >>> >>> ilhan >>> >>> >>> On Tue, Jun 25, 2019 at 10:57 AM Andras Deak <deak.and...@gmail.com> >>> wrote: >>> >>>> On Tue, Jun 25, 2019 at 4:29 AM Cameron Blocker >>>> <cameronjbloc...@gmail.com> wrote: >>>> > >>>> > In my opinion, the matrix transpose operator and the conjugate >>>> transpose operator should be one and the same. Something nice about both >>>> Julia and MATLAB is that it takes more keystrokes to do a regular transpose >>>> instead of a conjugate transpose. Then people who work exclusively with >>>> real numbers can just forget that it's a conjugate transpose, and for >>>> relatively simple algorithms, their code will just work with complex >>>> numbers with little modification. >>>> > >>>> >>>> I'd argue that MATLAB's feature of `'` meaning adjoint (conjugate >>>> transpose etc.) and `.'` meaning regular transpose causes a lot of >>>> confusion and probably a lot of subtle bugs. Most people are unaware >>>> that `'` does a conjugate transpose and use it habitually, and when >>>> for once they have a complex array they don't understand why the >>>> values are off (assuming they even notice). Even the MATLAB docs >>>> conflate the two operations occasionally, which doesn't help at all. >>>> Transpose should _not_ incur conjugation automatically. I'm already a >>>> bit wary of special-casing matrix dynamics this much, when ndarrays >>>> are naturally multidimensional objects. Making transposes be more than >>>> transposes would be a huge mistake in my opinion, already for matrices >>>> (2d arrays) and especially for everything else. >>>> >>>> AndrĂ¡s >>>> >>>> >>>> >>>> > Ideally, I'd like to see a .H that was the defacto Matrix/Linear >>>> Algebra/Conjugate transpose that for 2 or more dimensions, conjugate >>>> transposes the last two dimensions and for 1 dimension just conjugates (if >>>> necessary). And then .T can stay the Array/Tensor transpose for general >>>> axis manipulation. I'd be okay with .T raising an error/warning on 1D >>>> arrays if .H did not. I commonly write things like u.conj().T@v even >>>> if I know both u and v are 1D just so it looks more like an inner product. >>>> > >>>> > -Cameron >>>> > >>>> > On Mon, Jun 24, 2019 at 6:43 PM Ilhan Polat <ilhanpo...@gmail.com> >>>> wrote: >>>> >> >>>> >> I think enumerating the cases along the way makes it a bit more >>>> tangible for the discussion >>>> >> >>>> >> >>>> >> import numpy as np >>>> >> z = 1+1j >>>> >> z.conjugate() # 1-1j >>>> >> >>>> >> zz = np.array(z) >>>> >> zz # array(1+1j) >>>> >> zz.T # array(1+1j) # OK expected. >>>> >> zz.conj() # 1-1j ?? what happened; no arrays? >>>> >> zz.conjugate() # 1-1j ?? same >>>> >> >>>> >> zz1d = np.array([z]*3) >>>> >> zz1d.T # no change so this is not the regular 2D array >>>> >> zz1d.conj() # array([1.-1.j, 1.-1.j, 1.-1.j]) >>>> >> zz1d.conj().T # array([1.-1.j, 1.-1.j, 1.-1.j]) >>>> >> zz1d.T.conj() # array([1.-1.j, 1.-1.j, 1.-1.j]) >>>> >> zz1d[:, None].conj() # 2D column vector - no surprises if [:, None] >>>> is known >>>> >> >>>> >> zz2d = zz1d[:, None] # 2D column vector - no surprises if [:, None] >>>> is known >>>> >> zz2d.conj() # 2D col vec conjugated >>>> >> zz2d.conj().T # 2D col vec conjugated transposed >>>> >> >>>> >> zz3d = np.arange(24.).reshape(2,3,4).view(complex) >>>> >> zz3d.conj() # no surprises, conjugated >>>> >> zz3d.conj().T # ?? Why not the last two dims swapped like other >>>> stacked ops >>>> >> >>>> >> # For scalar arrays conjugation strips the number >>>> >> # For 1D arrays transpose is a no-op but conjugation works >>>> >> # For 2D arrays conjugate it is the matlab's elementwise conjugation >>>> op .' >>>> >> # and transpose is acting like expected >>>> >> # For 3D arrays conjugate it is the matlab's elementwise conjugation >>>> op .' >>>> >> # but transpose is the reversing all dims just like matlab's >>>> permute() >>>> >> # with static dimorder. >>>> >> >>>> >> and so on. Maybe we can try to identify all the use cases and the >>>> quirks before we can make design the solution. Because these are a bit more >>>> involved and I don't even know if this is exhaustive. >>>> >> >>>> >> >>>> >> On Mon, Jun 24, 2019 at 8:21 PM Marten van Kerkwijk < >>>> m.h.vankerkw...@gmail.com> wrote: >>>> >>> >>>> >>> Hi Stephan, >>>> >>> >>>> >>> Yes, the complex conjugate dtype would make things a lot faster, >>>> but I don't quite see why we would wait for that with introducing the `.H` >>>> property. >>>> >>> >>>> >>> I do agree that `.H` is the correct name, giving most immediate >>>> clarity (i.e., people who know what conjugate transpose is, will recognize >>>> it, while likely having to look up `.CT`, while people who do not know will >>>> have to look up regardless). But at the same time agree that the docstring >>>> and other documentation should start with "Conjugate tranpose" - good to >>>> try to avoid using names of people where you have to be in the "in crowd" >>>> to know what it means. >>>> >>> >>>> >>> The above said, if we were going with the initial suggestion of >>>> `.MT` for matrix transpose, then I'd prefer `.CT` over `.HT` as its >>>> conjugate version. >>>> >>> >>>> >>> But it seems there is little interest in that suggestion, although >>>> sadly a clear path forward has not yet emerged either. >>>> >>> >>>> >>> All the best, >>>> >>> >>>> >>> Marten >>>> >>> >>>> >>> _______________________________________________ >>>> >>> NumPy-Discussion mailing list >>>> >>> NumPy-Discussion@python.org >>>> >>> https://mail.python.org/mailman/listinfo/numpy-discussion >>>> >> >>>> >> _______________________________________________ >>>> >> NumPy-Discussion mailing list >>>> >> NumPy-Discussion@python.org >>>> >> https://mail.python.org/mailman/listinfo/numpy-discussion >>>> > >>>> > _______________________________________________ >>>> > NumPy-Discussion mailing list >>>> > NumPy-Discussion@python.org >>>> > https://mail.python.org/mailman/listinfo/numpy-discussion >>>> _______________________________________________ >>>> NumPy-Discussion mailing list >>>> NumPy-Discussion@python.org >>>> https://mail.python.org/mailman/listinfo/numpy-discussion >>>> >>> _______________________________________________ >>> NumPy-Discussion mailing list >>> NumPy-Discussion@python.org >>> https://mail.python.org/mailman/listinfo/numpy-discussion >>> >> _______________________________________________ >> NumPy-Discussion mailing list >> NumPy-Discussion@python.org >> https://mail.python.org/mailman/listinfo/numpy-discussion >> > _______________________________________________ > NumPy-Discussion mailing list > NumPy-Discussion@python.org > https://mail.python.org/mailman/listinfo/numpy-discussion >
_______________________________________________ NumPy-Discussion mailing list NumPy-Discussion@python.org https://mail.python.org/mailman/listinfo/numpy-discussion