On Thu, Jul 8, 2010 at 5:09 PM, Robert Kern <robert.k...@gmail.com> wrote: > On Thu, Jul 8, 2010 at 18:00, Bruce Southey <bsout...@gmail.com> wrote: >> On Thu, Jul 8, 2010 at 4:39 PM, Rob Speer <rsp...@mit.edu> wrote: >>>>> Still, I have a question. Did you also agree that this should forcibly >>>>> index >>>>> through ticks? >>>>> >>>>> arr.something[int] -> tick-based indexing >>>>> >>>> >>>> Yes. >>> >>> I feel like people are talking about different things because it's >>> unclear what the .something is. >>> >>> If the .something is an axis name, then no. arr.year[0] should get the >>> first year in the data, not the data from the "year 0". >>> >>> If the .something is the attribute we use for named lookup (such as >>> ".named"), then yes. arr.named[2006] should get whatever tick is named >>> 2006 on the first axis. >>> -- Rob >>> _______________________________________________ >> >> Then how is this not different than a record array? > > A record array lets you label exactly one notional "axis" (which isn't > actually an axis as far as numpy is concerned). This lets you label > all of the axes in a multidimensional array. > > -- > Robert Kern > > "I have come to believe that the whole world is an enigma, a harmless > enigma that is made terrible by our own mad attempt to interpret it as > though it had an underlying truth." > -- Umberto Eco > _______________________________________________ > NumPy-Discussion mailing list > NumPy-Discussion@scipy.org > http://mail.scipy.org/mailman/listinfo/numpy-discussion > I based this on the example at: http://www.scipy.org/RecordArrays
>>> import numpy as np >>> img = np.array([[(0,0,0), (1,0,0)], [(0,1,0), (0,0,1)]], {'names': >>> ('named','g','b'), 'formats': ('f4', 'f4', 'f4')}) >>> arr= img.view(np.recarray) >>> arr.named array([[ 0., 1.], [ 0., 0.]], dtype=float32) >>> arr.named[:,1] array([ 1., 0.], dtype=float32) >>> img['named'] array([[ 0., 1.], [ 0., 0.]], dtype=float32) >>> arr['named'] array([[ 0., 1.], [ 0., 0.]], dtype=float32) I think that we need consistency with ndarrays such that the first index is to the first axis, the second is to the second axis etc. This means that the actual axis name is perhaps irrelevant when indexing and slicing etc. Actually I have trouble thinking about how you refer to a single axis in a multiple dimensional cases without addressing the other axes. So from an example from Lluis: "As axis always have a total order, I'd go for the most compact representation (assuming 'country' is the first axis, and 'year' the second one): arr['Netherlands','2010'] " So continuing the example, you can do this: >>> arr['named'][0,1] 1.0 But you can not do this: >>> arr['named',0,1] Traceback (most recent call last): File "<pyshell#20>", line 1, in <module> arr['named',0,1] File "E:\Python26\lib\site-packages\numpy\core\records.py", line 453, in __getitem__ obj = ndarray.__getitem__(self, indx) ValueError: setting an array element with a sequence. Bruce _______________________________________________ NumPy-Discussion mailing list NumPy-Discussion@scipy.org http://mail.scipy.org/mailman/listinfo/numpy-discussion