<p dir="ltr"><br>
On Feb 11, 2014 3:23 AM, "Alan G Isaac" <<a href="mailto:alan.isaac@gmail.com">alan.isaac@gmail.com</a>> wrote:<br>
><br>
> On 2/10/2014 7:39 PM, Pauli Virtanen wrote:<br>
> > The issue here is semantics for basic linear algebra operations, such as<br>
> > matrix multiplication, that work for different matrix objects, including<br>
> > ndarrays.<br>
><br>
><br>
> I'll see if I can restate my suggestion in another way,<br>
> because I do not feel you are responding to it.<br>
> (I might be wrong.)<br>
><br>
> What is a duck?  If you ask it to quack, it quacks.<br>
> OK, but what is it to quack?<br>
><br>
> Here, quacking is behaving like an ndarray (in your view,<br>
> as I understand it) when asked.  But how do we ask?<br>
> Your view (if I understand) is we ask via the operations<br>
> supported by ndarrays.  But maybe that is the wrong way<br>
> for the library to ask this question.<br>
><br>
> If so, then scipy libraries could ask an object<br>
> to behave like an an ndarray by calling, e.g.,<br>
> __asarray__ on it. It becomes the responsibility<br>
> of the object to return something appropriate<br>
> when __asarray__ is called. Objects that know how to do<br>
> this will provide __asarray__ and respond<br>
> appropriately.  Other types can be coerced if<br>
> that is the documented behavior (e.g., lists).<br>
> The libraries will then be written for a single<br>
> type of behavior.  What it means to "quack" is<br>
> pretty easily documented, and a matrix object<br>
> already knows how (e.g., m.A).  Presumably in<br>
> this scenario __asarray__ would return an object<br>
> that behaves like an ndarray and a converter for<br>
> turning the final result into the desired object<br>
> type (e.g., into a `matrix` if necessary).<br>
><br>
> Hope that clearer, even if it proves a terrible idea.<br>
><br>
> Alan Isaac</p>
<p dir="ltr">I don't currently use the matrix class, but having taken many linear algebra classes I can see the appeal, and if I end up teaching the subject I think I would appreciate having it available.</p>
<p dir="ltr">On the other hand, I certainly can see the possibility for confusion, and I don't think it is something that should be used unless someone has a really good reason.</p>
<p dir="ltr">So I come out somewhere in the middle here.  So, although this may end up being a terrible idea, I would like to purpose what I think is a compromise: instead of just removing matrix, split it out into a scikit.  That way, it it's still available for those who need it, but will be less likely to be used accidentally, and won't be interfering with the rest of numpy and scipy development.</p>

<p dir="ltr">Specifically, I would split matrix into a scikit, while in the same release deprecate np.matrix.  They can then exist in parallel for a few releases to allow code to be ported away from it.</p>
<p dir="ltr">However, I would suggest that before the split, all linear algebra routines should be available as functions or methods in numpy proper.</p>