I'm looking for a way to acccomplish the following task without lots of loops involved, which are really slowing down my code.
I have a 128x512 array which I want to break down into 2x2 squares. Then, for each 2x2 square I want to do some simple calculations such as finding the maximum value, which I then store in a 64x256 array. Here is the actual code involved. It's only slightly more complex than what I described above, since it also involves doing a bit of masking on the 2x2 sub-arrays. Any hints are much appreciated! An inordinate amount of time is being spent in this function and another one like it. Catherine def calc_sdcm_at_rlra(self,iblock): npixl = self.nlineht/self.nlinerl npixs = self.nsmpht/self.nsmprl sdcm_out = numpy.array([Constants.CLOUDMASK_NR] *self.nlinerl*self.nsmprl,'int8') \ .reshape(self.nlinerl,self.nsmprl) for ilinerl in range(0,self.nlinerl): for ismprl in range(0,self.nsmprl): height = self.data[iblock].height[ilinerl*2:ilinerl*2 +2, ismprl*2:ismprl*2+2] sdcm = self.data[iblock].sdcm[ilinerl*2:ilinerl*2 +2, ismprl*2:ismprl*2+2] source = self.data[iblock].heightsrc [ilinerl*2:ilinerl*2+2, ismprl*2:ismprl*2+2] mask1 = (source == Constants.HEIGHT_STEREO) mask2 = ( (source == Constants.HEIGHT_SURFACE) | \ (source == Constants.HEIGHT_DEFAULT) ) if (mask1.any()): loc = height[mask1].argmax() sdcm_out[ilinerl,ismprl] = sdcm[mask1].ravel()[loc] elif (mask2.any()): loc = height[mask2].argmax() sdcm_out[ilinerl,ismprl] = sdcm[mask2].ravel()[loc] return sdcm_out _______________________________________________ Numpy-discussion mailing list Numpy-discussion@scipy.org http://projects.scipy.org/mailman/listinfo/numpy-discussion