← Back to team overview

larry-discuss team mailing list archive

Re: Index by label support added to experimental branch

 

On Mon, Feb 8, 2010 at 12:56 PM, Keith Goodman <kwgoodman@xxxxxxxxx> wrote:
> On Mon, Feb 8, 2010 at 12:51 PM,  <josef.pktd@xxxxxxxxx> wrote:
>> On Mon, Feb 8, 2010 at 3:37 PM, Keith Goodman <kwgoodman@xxxxxxxxx> wrote:
>>> On Mon, Feb 8, 2010 at 12:27 PM, Keith Goodman <kwgoodman@xxxxxxxxx> wrote:
>>>> I made a branch called index-by-label:
>>>>
>>>> https://code.launchpad.net/~kwgoodman/larry/index-by-label
>>>>
>>>> and added support for indexing by label. It is all self contained in
>>>> one method: deflarry.py(lix). So easy to try.
>>>>
>>>> Here are a few one-off tests:
>>>>
>>>>>> y = la.larry([[1,2],[3,4]], [['a', 'b'], ['c', 'd']])
>>>>
>>>>>> y.lix[['a']]
>>>> label_0
>>>>    c
>>>>    d
>>>> x
>>>> array([1, 2])
>>>>
>>>>>> y.lix[['b', 'a']]
>>>> label_0
>>>>    b
>>>>    a
>>>> label_1
>>>>    c
>>>>    d
>>>> x
>>>> array([[3, 4],
>>>>       [1, 2]])
>>>>
>>>>>> y.lix[['a']:]
>>>> label_0
>>>>    a
>>>>    b
>>>> label_1
>>>>    c
>>>>    d
>>>> x
>>>> array([[1, 2],
>>>>       [3, 4]])
>>>>
>>>>>> y.lix[:['b']]
>>>> label_0
>>>>    a
>>>> label_1
>>>>    c
>>>>    d
>>>> x
>>>> array([[1, 2]])
>>>>
>>>>>> y.lix[['a'], ['c']:]
>>>> label_0
>>>>    c
>>>>    d
>>>> x
>>>> array([1, 2])
>>>>
>>>>>> y.lix[['a'], ['d', 'c']]
>>>> label_0
>>>>    d
>>>>    c
>>>> x
>>>> array([2, 1])
>>>>
>>>>>> y.lix['a':]  # <--- expected to crash
>>>> ValueError: The start element of a slice must be a list.
>>>
>>> I think the only thing left to add is the conversion of fancy indexing
>>> to rectangular:
>>>
>>>>> y.lix[['a', 'b'], ['d', 'c']]
>>> IndexError: tuple index out of range
>>>
>>> How do I identify rectangular indexing? If more than one list with
>>> more than one element are present anywhere in the index, then it is
>>> rectangular and I need to do your trick np.array(first list)[:,None]?
>>
>> that's the idea, with matching axes added
>>
>> can you use np.idx_ directly, once you have the numeric index list ?
>>
>> y.x[np.ix_(lists of indices)]
>>
>> might not work with slices, to avoid problems with mixing slices and
>> array indexing, I converted slices in the past to a array of indices
>>
>> slice(None)   -> np.arange(x.shape(ax))
>>
>> then np.ix_ or broadcasting can take over
>
> Sounds easier than the direction I was going. OK, I'll try
>
> slice(a,b,c) --> range(a,b,c)
>
> and then use npix_
>

slice(a,b,c) --> np.arange(a,b,c)



References