On 8 Mar, 17:32, Peter Otten <[EMAIL PROTECTED]> wrote: > [EMAIL PROTECTED] wrote: > > One of my many project involves working with YUV-files, where I need > > to reduce > > the vertical resolution with a factor of two, i.e. remove every other > > scan line. > > Today I'm using two for-loops in the fashion shown below > > > y = [] > > for i in range(0, width*height, width*2): > > for j in range(0,width): > > y.append(Y[i+j]) > > > This approach doesn't feel very pythonic but I can't come up with a > > better idea to do it. > > I've tried list comprehension and map together with lambda but I can't > > get a flattened list > > of every other scan-line... > > > CIF = 352x288 items for luminance and the aim is to have the list > > below: > > y = [0:352 704:1056 ... ] > >>> width = 3; height = 5 > >>> Y = range(width*height) > >>> y = [] > >>> for i in range(0, width*height, 2*width): > > ... y.extend(Y[i:i+width]) > ...>>> y > > [0, 1, 2, 6, 7, 8, 12, 13, 14] > > Probably more efficient, but needs numpy: > > >>> import numpy > >>> width = 3 > >>> height = 5 > >>> Y = range(width*height) > >>> a = numpy.array(Y).reshape(height, width) > >>> a > > array([[ 0, 1, 2], > [ 3, 4, 5], > [ 6, 7, 8], > [ 9, 10, 11], > [12, 13, 14]])>>> b = a[::2] > >>> b > > array([[ 0, 1, 2], > [ 6, 7, 8], > [12, 13, 14]])>>> list(b.reshape(len(b)*width)) > > [0, 1, 2, 6, 7, 8, 12, 13, 14] > > Peter
Thanx guys! -- http://mail.python.org/mailman/listinfo/python-list