On Wed, Dec 7, 2022 at 11:51 PM Ilhan Polat <ilhanpo...@gmail.com> wrote:

>
> On matrix_transpose() :
> Every time this discussion brought up, there was a huge resistance to add
> more methods to array object or new functions (I have been involved in some
> of them on the pro .H side, links you have given and more in the mailing
> list) and now we are adding .mT and not .H? That is very surprising to me
> (and disappointing) after forcing people to write A.conj().T for years
> which is fundamentally the most common 2D operation regarding transpose and
> from a user experience perspective. Having a function name with the word
> "matrix" is already problematic but I can live with that. But adding .mT to
> the main namespace seems really going against all decisions made in the
> past. I also wish for cache-oblivious inplace transposition too that would
> make many linalg functions perform faster but I wouldn't dare to propose
> inplace_transpose() or .iT because it is not that important for *all*
> users. And in a way, neither is mT.
>
> Again not trying to starting an old dumpster fire but surely there must
> have been some consideration for .H before we ended up with milliTranspose.
> In fact, as I am typing this, I am already regretting it.
>

In that case, I propose to not dive into .H here - it is a separate and
more complicated topic that was not proposed here. Chuck brought it up in
the community meeting, we had a chat about it. tl;dr "it is complicated".

That said, the thing that got a clearer thumbs up (both on GitHub and
yesterday) is the `matrix_transpose` function, not the ndarray attribute.
Aaron, given that you are looking for functionality that has value and can
be implemented in a backwards compatible fashion, I suggest implementing
`matrix_transpose`, and not deal with `.mT` right now.

Cheers,
Ralf


Just a rant about typing too much conj().T lately I guess.
>
>
>
>
>
>
>
> On Wed, Dec 7, 2022 at 10:26 PM Aaron Meurer <asmeu...@gmail.com> wrote:
>
>> Hi all.
>>
>> As discussed in today's community meeting, I plan to start working on
>> adding some useful functions to NumPy which are part of the array API
>> standard https://data-apis.org/array-api/latest/index.html.
>>
>> Although these are all things that will be needed for NumPy to be
>> standard compliant, my focus for now at least is going to be on new
>> functionality that is useful for NumPy independent of the standard.
>> The things that I (and possibly others) plan on working on are:
>>
>> - A new function matrix_transpose() and corresponding ndarray
>> attribute x.mT. Unlike transpose(), matrix_transpose() will require at
>> least 2 dimensions and only operate on the last two dimensions (it's
>> effectively an alias for swapaxes(x, -1, -2)). This was discussed in
>> the past at https://github.com/numpy/numpy/issues/9530 and
>> https://github.com/numpy/numpy/issues/13797. See
>>
>> https://data-apis.org/array-api/latest/API_specification/generated/signatures.linear_algebra_functions.matrix_transpose.html
>>
>> - namedtuple outputs for eigh, qr, slogdet and svd. This would only
>> apply to the instances where they currently return a tuple (e.g.,
>> svd(compute_uv=False) would still just return an array). See the
>> corresponding pages at
>> https://data-apis.org/array-api/latest/extensions/index.html for the
>> namedtuple names. These four functions are the ones that are part of
>> the array API spec, but if there are other functions that aren't part
>> of the spec which we'd like to update to namedtuples as well for
>> consistency, I can look into that.
>>
>> - New functions matrix_norm() and vector_norm(), which split off the
>> behavior of norm() between vector and matrix specific functionalities.
>> This is a cleaner API and would allow these functions to be proper
>> gufuncs. See
>> https://data-apis.org/array-api/latest/extensions/generated/signatures.linalg.vector_norm.html
>> and
>> https://data-apis.org/array-api/latest/extensions/generated/signatures.linalg.matrix_norm.html
>> .
>>
>> - New function vecdot() which does a broadcasted 1-D dot product along
>> a specified axis
>>
>> https://data-apis.org/array-api/latest/API_specification/generated/signatures.linear_algebra_functions.vecdot.html#signatures.linear_algebra_functions.vecdot
>>
>> - New function svdvals(), which is equivalent to
>> svd(compute_uv=False). The idea here is that functions that have
>> different return types depending on keyword arguments are problematic
>> for various reasons (e.g., they are hard to type annotate), so it's
>> cleaner to split these APIs. Functionality-wise there's not much new
>> here, so this is lower priority than the rest.
>>
>> - New function permute_dims(), which works just like transpose() but
>> it has a required axis argument. This is more explicit and can't be
>> confused with doing a matrix transpose, which transpose() does not do
>> for stacked matrices by default.
>>
>> - Adding a copy argument to reshape(). This has already been discussed
>> at https://github.com/numpy/numpy/issues/9818. The main motivation is
>> to replace the current usage of modifying array.shape inplace. (side
>> note: this also still needs to be added to numpy.array_api)
>>
>> You can see the source code of numpy.array_api for an idea of what
>> pure Python implementations of these changes look like, but to be
>> clear, the proposal here is to add these to the main NumPy namespace,
>> not to numpy.array_api.
>>
>> One question I have is which of the new functions proposed should be
>> implemented as pure Python wrappers and which should be implemented in
>> C as ufuncs/gufuncs?
>>
>> Unless there are any objections, I plan to start working on
>> implementing these right away.
>>
>> Aaron Meurer
>> _______________________________________________
>> NumPy-Discussion mailing list -- numpy-discussion@python.org
>> To unsubscribe send an email to numpy-discussion-le...@python.org
>> https://mail.python.org/mailman3/lists/numpy-discussion.python.org/
>> Member address: ilhanpo...@gmail.com
>>
> _______________________________________________
> NumPy-Discussion mailing list -- numpy-discussion@python.org
> To unsubscribe send an email to numpy-discussion-le...@python.org
> https://mail.python.org/mailman3/lists/numpy-discussion.python.org/
> Member address: ralf.gomm...@googlemail.com
>
_______________________________________________
NumPy-Discussion mailing list -- numpy-discussion@python.org
To unsubscribe send an email to numpy-discussion-le...@python.org
https://mail.python.org/mailman3/lists/numpy-discussion.python.org/
Member address: arch...@mail-archive.com

Reply via email to