[Numpy-discussion] matrix wart

Travis E. Oliphant oliphant@enthought....
Fri Feb 22 09:22:29 CST 2008

>> Could you explain to me how you'd like this to be fixed?  If the 
>> matrix becomes a container of 1-d arrays, then you can no longer 
>> expect x[:,0] to return a column vector -- which was one 
>> of the reasons the matrix class was created.  While not 
>> entirely consistent, one workaround would be to detect 
>> when a matrix is a "vector", and then do 1-d-like indexing 
>> on it. 
> Letting M be a matrix and A=M.A, and i and j are integers.
> I would want two principles to be honored.
> 1. ordinary Python indexing produces unsurprising results,
>    so that e.g. M[0][0] returns the first element of the matrix
> 2. indexing that produces a 2-d array when applied to A
>    will produce the equivalent matrix when applied to M
> There is some tension between these two requirements,
> and they do not address your specific example.
> Various reconciliations can be imagined.
> I believe a nice one can be achieved with
> a truly minimal change, as follows.
> Let M[i] return a 1d array.  (Unsurprising!)
> This is a change: a matrix becomes a container
This is a concrete proposal and I don't immediately have a problem with 
it (other than it will break code and so must go in to 1.1).
> Let M[:,i] and M[i,:] behave as now.
Some would expect M[i,:] and M[i] to be the same thing, but I would be 
willing to squelsh those expectations if many can agree that M[i] should 
return an array.
> In addition, as a consistency measure, one might
> ask that M[i,j] return a 1 x 1 matrix.  (This is
> of secondary importance, but it follows the
> principle that the use of multiple indexes
> produces matrices.)
I'm pretty sure that wasn't the original "principle", but again this is 
not unreasonable.
> Right now I'm operating on caffeine instead of sleep,
> but that looks right ...
> Alan Isaac

More information about the Numpy-discussion mailing list