On Mon, Feb 10, 2014 at 6:39 PM, <josef.p...@gmail.com> wrote:

>
>
> On Mon, Feb 10, 2014 at 6:29 PM, Pauli Virtanen <p...@iki.fi> wrote:
>
>> 11.02.2014 00:31, Alan G Isaac kirjoitti:
>> > On 2/10/2014 5:11 PM, Pauli Virtanen wrote:
>> >> The existence of np.matrix messes up the general agreement on ndarray
>> >> semantics in Python. The meaning of very basic code such as
>> >>
>> >>      A * B
>> >>      A.sum(0)
>> >>      A[0]
>> >>
>> >> where A and B are NxN matrices of some sort now depends on the types
>> >> of A and B. This makes writing duck typed code impossible when both
>> >> semantics are in play.
>> >
>> > I'm just missing the point here; sorry.
>> > Why isn't the right approach to require that
>> > any object that wants to work with scipy
>> > can be called  by `asarray` to guarantee
>> > the core semantics? (And the matrix
>> > object passes this test.)  For some objects
>> > we can agree that `asarray` will coerce them.
>> > (E.g., lists.)
>> >
>> > I just do not see why scipy should care about
>> > the semantics an object uses for interacting
>> > with other objects of the same type.
>>
>> I have a couple of points:
>>
>> (A)
>>
>> asarray() coerces the input to a dense array. This you do not want to do
>> to sparse matrices or matrix-free linear operators, as many linear
>> algebra algorithms don't need to know the matrix entries.
>>
>> (B)
>>
>> Coercing input types is something that is seldom done in Python code,
>> since it breaks duck typing.
>>
>> Usually, the interface is specified by assumed semantics of the input
>> objects. The user is then free to pass in mock objects that fulfill the
>> necessary subsection of the assumed interface.
>>
>
> Almost all the code in scipy.stats and statsmodels starts with np.asarray.
> The numpy doc standard has the term `array_like` to indicate things that
> can be converted to a usable object by ndasarray.
>
> ducktyping could be restricted to a very narrow category of ducks.
>

I thought once it would be nice to have a flag on the classes that indicate
`array_semantic` versus `matrix_semantic` so it would be easy to check the
quack instead of the duck.

Josef



>
> What about masked arrays and structured dtypes?
> Because we cannot usefully convert them by asarray, we have to tell users
> that they don't work with a function.
> Our ducks that quack in the wrong way. ?
>
> How do you handle list and other array_likes in sparse?
>
> Josef
>
>
>>
>> (C)
>>
>> This is not only about Scipy, but also a language design question:
>>
>> Suppose someone, who is not a Python expert, wants to implement a
>> linear algebra algorithm in Python.
>>
>> Will they write it using matrix or ndarray? (Note: np.matrix is not
>> uncommon on stackoverflow.)
>>
>> Will someone who reads the code easily understand what it does (does *
>> stand for elementwise or matrix product etc)?
>>
>> Can they easily make it work both with sparse and dense matrices?
>> Matrix-free operators? Does it work both for ndarray and np.matrix inputs?
>>
>> (D)
>>
>> The presence of np.matrix invites people to write code using the
>> np.matrix semantics. This can further lead to the code spitting out
>> dense results as np.matrix, and then it becomes difficult to follow
>> what sort of an object you have.
>>
>> (E)
>>
>> Some examples of the above semantics diaspora on scipy.sparse:
>>
>> * Implementation of GMRES et al in Scipy. The implementation reinvents
>>   yet another set of semantics that it uses internally.
>>
>> * scipy.sparse has mostly matrix semantics, but not completely, and the
>>   return values vary between matrix and ndarray
>>
>>
>> --
>> Pauli Virtanen
>>
>>
>> _______________________________________________
>> NumPy-Discussion mailing list
>> NumPy-Discussion@scipy.org
>> http://mail.scipy.org/mailman/listinfo/numpy-discussion
>>
>
>
_______________________________________________
NumPy-Discussion mailing list
NumPy-Discussion@scipy.org
http://mail.scipy.org/mailman/listinfo/numpy-discussion

Reply via email to