On Fri, Sep 14, 2012 at 4:36 AM, Bala subramanian <bala.biophys...@gmail.com> wrote: > > 10 # loop over each row > 11 for i1, d1 in enumerate(b): > 12 # each x in d1 - value in z corresponding to index of x in d1 > 13 d1=[x-z[d1.index(x)] for x in d1] > > If d1 is a simple list, i can fetch the index of its element as > d1.index(x). So i would like to know how can achieve the same with > numpy array.
In general you don't want to loop over and enumerate a NumPy array. That's a lot slower than using vectorized operations (just like in MATLAB) and broadcasting. See Peter Otten's answer. For an 'index' operation you have a couple of options. To begin with, a test returns a bool array: >>> d = np.array([1,2,1,2,1]) >>> d == 1 array([ True, False, True, False, True], dtype=bool) You can use this bool array to index the source array: >>> d[d == 1] array([1, 1, 1]) >>> d[d == 1] = 3 >>> d array([3, 2, 3, 2, 3]) To get the indexes, use "nonzero" or "where": >>> np.nonzero(d == 2) (array([1, 3]),) >>> np.where(d == 2) (array([1, 3]),) _______________________________________________ Tutor maillist - Tutor@python.org To unsubscribe or change subscription options: http://mail.python.org/mailman/listinfo/tutor