[Python-ideas] fancy indexing
Sturla Molden
sturla at molden.no
Wed Jul 21 02:03:01 CEST 2010
Den 21.07.2010 00:51, skrev Mathias Panzenböck:
> I'm not sure what this is about but do you mean something like this?
> >>> l=[1,2,3,4]
> >>> l[1:2] = ['a','b']
> >>> l
> [1, 'a', 'b', 3, 4]
No, that is slicing. A fancy index is a more flexible slice, as it has
no regular structure. It's just a list, tuple or array of indexes, in
arbitrary order, possibly repeated.
It would e.g. work like this:
>>> alist = [1,2,3,4]
>>> alist[(1,2,1,1,3)]
[2, 3, 2, 2, 4]
If know SQL, it means that you can do with indexing what SQL can do with
WHERE and JOIN. You can e.g. search a list in O(N) for indexes where a
certain condition evaluates to True (cf. SQL WHERE), and then apply
these indexes to any list (cf. SQL JOIN).
It is not just for queries, but also for things like sorting. It is what
lets NumPy have an "argsort" function. It does not return a sorted
array, but an array of indices, which when applied to the array, will
return a sorted instance. These indices can in turn be applied to other
arrays as well.
Think about what happens when you sort each row in an Excel spreadsheet
by the values in a certain column. One column is sorted, the other
columns are reordered synchroneously. That is the kind of thing that
fancy indexing allows us to do rather easily.
Yes there are other ways of doing this in Python now, but not as elegent
I think. And it is not a syntax change to Python (NumPy can do it), it
is just a library issue.
This is at least present in NumPy, MATLAB, C# and LINQ, SQL, Fortran 95
(in two ways), Scilab, Octave, and C++ (e.g. Blitz++). The word "fancy
indexing" is the name used for it in NumPy.
Sturla
More information about the Python-ideas
mailing list