[Numpy-discussion] matrix indexing question

Colin J. Williams cjw at sympatico.ca
Mon Mar 26 07:53:09 EDT 2007


Alan G Isaac wrote:
>>> On 3/26/07, Alan G Isaac <aisaac at american.edu> wrote: 
>>>> finds itself in basic conflict with the idea that 
>>>> I ought to be able to iterate over the objects in an 
>>>> iterable container.  I mean really, does this not "feel" 
>>>> wrong? ::
>     >>> for item in x: print item.__repr__()
>     >>> ...
>     >>> matrix([[1, 2]])
>     >>> matrix([[3, 4]]) 
> 
> 
> On Mon, 26 Mar 2007, Bill Baxter apparently wrote: 
>> So you're saying this is what you'd find more pythonic? 
>>>>> X[1] 
>> matrix([2,3]) 
>>>>> X[:,1] 
>> matrix([[3, 
>>             4]]) 
>> Just trying to make it clear what you're proposing. 
> 
> 
> No; that is not possible, since a matrix is inherently 2d.
> I just want to get the constituent arrays when I iterate
> over the matrix object or use regular Python indexing, but 
> a matrix when I use matrix/array indexing.  That is ::
> 
>     >>> X[1] 
>     array([2,3]) 
>     >>> X[1,:] 
>     matrix([[3, 4]]) 
> 
> That behavior seems completely natural and unsurprising.

Perhaps things would be clearer if we thought of the constituent groups 
of data in a matrix as being themselves matrices.

X[1] could represent the second row of a matrix. A row of a matrix is a 
row vector, a special case of a matrix.  To get an array, I suggest that 
an explicit conversion X[1].A is a clearer way to handle things.

Similarly, X[2, 3] is best returned as a value which is of a Python type.

Colin W.
> 
> 
>> Probably about half the bugs I get from mixing and matching matrix and 
>> array are things like 
>>    row = A[i] 
>>    ... 
>>    z = row[2]
>> Which works for an array but not for a matrix. 
> 
> 
> Exactly!
> That is the evidence of a "bad surprise" in the current 
> behavior.  Iterating over a Python iterable should provide 
> access to the contained objects.
> 
> Cheers,
> Alan Isaac




More information about the NumPy-Discussion mailing list