On Thu, Jun 27, 2019 at 4:19 AM Ilhan Polat <ilhanpo...@gmail.com> wrote:

> I've finally gone through the old discussion and finally got the
> counter-argument in one of the Dag Sverre's replies
> http://numpy-discussion.10968.n7.nabble.com/add-H-attribute-tp34474p34668.html
>
> TL; DR
>
> I disagree with [...adding the .H attribute...] being forward looking, as
>> it explicitly creates a situation where code will break if .H becomes a
>> view
>>
>
> This actually makes perfect sense and a valid concern that I have not
> considered before.
>
> The remaining question is why we treat as if returning a view is a
> requirement. We have been using .conj().T and receiving the copies of the
> arrays since that day with equally inefficient code after many years. Then
> the discussion diverges to other things hence I am not sure where does this
> requirement come from.
>

I think that's in that thread somewhere in more detail, but the summary is:
1. properties imply that they're cheap computationally
2. .T returning a view and .H a copy would be inconsistent and unintuitive
There may be one more argument, this is just from memory.

Cheers,
Ralf



> But I guess this part should be rehashed clearer until next time :)
>
>
>
>
> On Thu, Jun 27, 2019 at 12:03 AM Charles R Harris <
> charlesr.har...@gmail.com> wrote:
>
>>
>>
>> On Wed, Jun 26, 2019 at 2:18 PM Ralf Gommers <ralf.gomm...@gmail.com>
>> wrote:
>>
>>>
>>>
>>> On Wed, Jun 26, 2019 at 10:04 PM Kirill Balunov <kirillbalu...@gmail.com>
>>> wrote:
>>>
>>>> Only concerns #4 from Ilhan's list.
>>>>
>>>> ср, 26 июн. 2019 г. в 00:01, Ralf Gommers <ralf.gomm...@gmail.com>:
>>>>
>>>>>
>>>>> [....]
>>>>>
>>>>> Perhaps not full consensus between the many people with different
>>>>> opinions and interests. But for the first one, arr.T change: it's clear
>>>>> that this won't happen.
>>>>>
>>>>
>>>> To begin with, I must admit that I am not familiar with the accepted
>>>> policy of introducing changes to NumPy. But I find it quite
>>>> nonconstructive just to say - it will not happen. What then is the
>>>> point in the discussion?
>>>>
>>>
>>> There has been a *very* long discussion already, and several others on
>>> the same topic before. There are also long-standing ways of dealing with
>>> backwards compatibility - e.g. what Matthew said is not new, it's an agreed
>>> upon way of working.
>>> http://www.numpy.org/neps/nep-0023-backwards-compatibility.html lists
>>> some principles. That NEP is not yet accepted (it needs rework), but it
>>> gives a good idea of what does and does not go.
>>>
>>>
>>>>
>>>>
>>>>> Between Juan's examples of valid use, and what Stephan and Matthew
>>>>> said, there's not much more to add. We're not going to change correct code
>>>>> for minor benefits.
>>>>>
>>>>
>>>> I fully agree that any feature can find its use, valid or not is
>>>> another question. Juan did not present these examples, but I will
>>>> allow myself to assume that it is more correct to describe what is being
>>>> done there as a permutation, and not a transpose. In addition, in the
>>>> very next sentence, Juan adds that "These could be easily changed to
>>>> .transpose() (honestly they probably should!)"
>>>>
>>>> We're not going to change correct code for minor benefits.
>>>>>
>>>>
>>>> It's fair, I personally have no preferences in both cases, the most
>>>> important thing for me is that in the 2d case it works correctly. To
>>>> be honest, until today, I thought that `.T` will raise for` ndim > 2`. At
>>>> least that's what my experience told me. For example in
>>>>
>>>>     Matlab - Error using  .' Transpose on ND array is not defined. Use
>>>> PERMUTE instead.
>>>>
>>>>     Julia - transpose not defined for Array(Float64, 3). Consider using
>>>> permutedims for higher-dimensional arrays.
>>>>
>>>>     Sympy - raise ValueError("array rank not 2")
>>>>
>>>> Here, I agree with the authors that, to begin with, `transpose` is not
>>>> the best name, since in general it doesn’t fit as an any mathematical
>>>> definition (of course it will depend on what we take as an element) or a
>>>> definition from linear algebra. Thus the name `transpose` only leads
>>>> to confusion.
>>>>
>>>> For a note about another suggestion - `.T` to mean a transpose of the
>>>> last two dimensions, in Mathematica authors for some reason did the
>>>> opposite (personally, I could not understand why they made such a
>>>> choice :) ):
>>>>
>>>>     Transpose[list]
>>>>         transposes the first two levels in list.
>>>>
>>>>     I feel strongly that we should have the following policy:
>>>>>
>>>>>     * Under no circumstances should we make changes that mean that
>>>>> correct
>>>>>     old code will give different results with new Numpy.
>>>>>
>>>>
>>>> I find this overly strict rules that do not allow to evolve. I
>>>> completely agree that a silent change in behavior is a disaster, that
>>>> changing behavior (if it is not an error) in the same minor version (1.X.Y)
>>>> is not acceptable, but I see no reason to extend this rule for a major
>>>> version bump (2.A.B.),  especially if it allows something to improve.
>>>>
>>>
>>> I'm sorry, you'll have to live with this rule. We've had lots of
>>> discussion about this rule in many concrete cases. When existing code is
>>> buggy or is consistently confusing many users, we can discuss. But in
>>> general changing old code to do something else is a terrible idea.
>>>
>>>
>>>> I would see such a rough version of a roadmap of change (I foresee my
>>>> loneliness in this :)) Also considering this comment
>>>>
>>>>     Personally I would find any divergence between a.T and a.transpose()
>>>>>     to be rather surprising.
>>>>>
>>>>
>>>> it will be as follows:
>>>>
>>>> 1. in 1.18 add the `.permute` method to the array, with the same
>>>> semantics as `.transpose`.
>>>> 2. Starting from 1.18, emit  `FutureWarning`, ` DeprectationWarning` for
>>>> `.transpose` and advise replacing it with `.permute`.
>>>> 3. Starting from 1.18 for `.T` with` ndim> 2`, emit a `FutureWarning`,
>>>> with a note that in future versions the behavior will change.
>>>> 4. In version 2, remove the `.transpose` and change the behavior for
>>>> `.T`.
>>>>
>>>
>>> This is simply not enough. Many users will skip versions when upgrading.
>>> There must be an exceptionally good reason to change numerical results, and
>>> this simply is not one.
>>>
>>>
>> I agree with Ralf that `*.T` should be left alone, it is widely used and
>> changing its behavior is bound to lead to broken code. I could see `*.mT`
>> or `*.mH`, but I'm beginning to wonder if we would not be better served
>> with a better matrix class that could also deal intelligently with stacks
>> of row and column vectors. In the past I have preferred `einsum` over `@`
>> precisely because it made handling those variations easy. The `@` operator
>> is very convenient at a low level, but it simply cannot deal with stacks of
>> mixed types in generality. With a class we could do something about that.
>>
>>  Chuck
>> _______________________________________________
>> 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

Reply via email to