[PYTHON MATRIX-SIG] A problem with slicing

James Hugunin jjh@mama-bear.lcs.mit.edu
Fri, 15 Sep 95 11:29:09 -0400

>    I've been playing with another technique for indexing a matrix, borrowed  
>    from matlab.  I've implemented indexing matrices with a matrix of booleans  
>    (integers) that is the same size as the matrix being indexed (this only  
>    makes sense for a setvalue).  This is trivially done using the mapping  
>    semantics, and combined with some matrix comparision operators I've found  
>    this quite useful.
> Indeed. But how does it work for higher-dimensional arrays?
> APL provides a similar functionality using an operator called
> "compress".  Its boolean argument is always one-dimensional and it a
> works along a specified axis. If used on the right-hand side of an
> expression, it is simply filter(). In APL2 it may also be used on
> the left hand side of an assignment, as btw can all expressions
> that evaluate to a subset of elements of an array. This is an
> extremely powerful feature, but so complicated to implement that
> to my knowledge only IBM's mainframe version does it without
> restrictions.

My initial idea for higher-dimensional arrays was to use a matrix of  
booleans that was the size of the entire higher-d array being indexed, this  
fits naturally with the outputs from matrix comparision operators.  ie.

a = [[1,2,3], [4,5,6]]
--> a.gt(2) == [[0,0,1], [1,1,1]]
a[a.gt(2)] = 99
--> a == [[1,2,99], [99,99,99]]

However, I agree that it should be possible to rationally apply this to a  
subset of the matrix.  Something like:

a = [[1,2,3], [4,5,6]]
--> sum(a).gt(7) == [0,1]
a[sum(a).gt(7), :] = 99
--> a == [[1,2,3], [99,99,99]]

This example suggests that it should be possible to mix these boolean  
indices with range indices, and with single integer indices.  While this all  
sounds reasonable (and extremely powerful) to me, I have to confess that a  
few of my feeping creaturism warning lights go off when I sit back and look  
at it.  I'd love to hear more impressions on this, pro and con.


MATRIX-SIG  - SIG on Matrix Math for Python

send messages to: matrix-sig@python.org
administrivia to: matrix-sig-request@python.org