## Re: [Matplotlib-users] Division gotcha?

 Re: [Matplotlib-users] Division gotcha? From: Benjamin Root - 2011-08-29 21:30:10 Attachments: Message as HTML ```On Sun, Aug 28, 2011 at 3:03 PM, Bruce Ford wrote: > Getting a strange result trying to divide two 3d arrays. I am getting > a matrix of NaNs regardless of how I divide and I can't determine why. > > #opened a NetCDF file using python-netcdf4 > > var1 = nc_file.variables['var1'] ###shape = [31,181,360] with a > values ranging from 0 - 243 and NO NaNs in the array, dtype float32 > var2 = nc_file.variables['var2'] ###shape = [31,181,360] with a > values ranging from 0 - 4 (mostly zeros) and NO NaNs in the array, > dtype float32 > > np.seterr(all='ignore') #in case problem has something do to with > dividing by zero > > var1/var2 ###gives array of NaNs with shape of 31,181,360 > > #doing the division one slice at a time doesn't help... > for x in range(1,var1.shape[0]): > var[x,:,:] = var1[x,:,:]/var2[x,:,:] ###gives array of > NaNs with shape of 31,181,360 > > var = np.divide(var1,var2) ###gives array of NaNs with shape of 31,181,360 > > > print "

where max: " + np.where(var1 == np.max(var1)) #prints > (array([28]), array([79]), array([182])) > print var1[28,79,182] #print 545 > print var2[28,79,182] ##prints 6 > > #so there are values in this location that should not result in an > NaN. Instead I get an entire array of NaNs > > What am I missing? > > Bruce > > Just to be sure, what might appear to be all NaNs is not really. To find out for sure, do this: print np.any(np.isfinite(var1/var2)) If it is True, then the array is not full of NaNs and Infs, if False, then that would be odd. When you print an array to the screen, it will often only print part of the array. Furthermore, the author of the post that you link to in your other email misses some important facts about representation of numbers in computers. The reason 0 / 0 (integers) did not return a NaN or 2 / 0 return an Inf is that integers can not represent those values. Only floating point numbers can. Furthermore, there is an important difference between Inf and NaN. It is merely out of convenience that nan_to_num() would convert the Infs into the largest (or smallest for -Inf) floating point number. Other functions designed for NaN (such as nansum(), nanmax(), etc) do not treat Infs in this manner. Ben Root ```

 [Matplotlib-users] Division gotcha? From: Bruce Ford - 2011-08-28 20:04:09 ```Getting a strange result trying to divide two 3d arrays. I am getting a matrix of NaNs regardless of how I divide and I can't determine why. #opened a NetCDF file using python-netcdf4 var1 = nc_file.variables['var1'] ###shape = [31,181,360] with a values ranging from 0 - 243 and NO NaNs in the array, dtype float32 var2 = nc_file.variables['var2'] ###shape = [31,181,360] with a values ranging from 0 - 4 (mostly zeros) and NO NaNs in the array, dtype float32 np.seterr(all='ignore') #in case problem has something do to with dividing by zero var1/var2 ###gives array of NaNs with shape of 31,181,360 #doing the division one slice at a time doesn't help... for x in range(1,var1.shape[0]): var[x,:,:] = var1[x,:,:]/var2[x,:,:] ###gives array of NaNs with shape of 31,181,360 var = np.divide(var1,var2) ###gives array of NaNs with shape of 31,181,360 print "
 Re: [Matplotlib-users] Division gotcha? From: Bruce Ford - 2011-08-29 16:10:41 ```Closing the loop...I found the difficulty and applied this: var = np.nan_to_num(np.divide(var1,var2)) See this page: http://psaffrey.wordpress.com/2010/07/30/numpy-and-nan-again/ --------------------------------------- Bruce W. Ford Clear Science, Inc. bruce@... On Sun, Aug 28, 2011 at 4:03 PM, Bruce Ford wrote: > Getting a strange result trying to divide two 3d arrays.  I am getting > a matrix of NaNs regardless of how I divide and I can't determine why. > > #opened a NetCDF file using python-netcdf4 > > var1 = nc_file.variables['var1']  ###shape = [31,181,360] with a > values ranging from 0 - 243 and NO NaNs in the array, dtype float32 > var2 = nc_file.variables['var2']  ###shape = [31,181,360] with a > values ranging from 0 - 4 (mostly zeros) and NO NaNs in the array, > dtype float32 > > np.seterr(all='ignore')  #in case problem has something do to with > dividing by zero > > var1/var2  ###gives array of NaNs with shape of 31,181,360 > > #doing the division one slice at a time doesn't help... > for x in range(1,var1.shape[0]): >            var[x,:,:] = var1[x,:,:]/var2[x,:,:]  ###gives array of > NaNs with shape of 31,181,360 > > var = np.divide(var1,var2)  ###gives array of NaNs with shape of 31,181,360 > > > print "
 Re: [Matplotlib-users] Division gotcha? From: Benjamin Root - 2011-08-29 21:30:10 Attachments: Message as HTML ```On Sun, Aug 28, 2011 at 3:03 PM, Bruce Ford wrote: > Getting a strange result trying to divide two 3d arrays. I am getting > a matrix of NaNs regardless of how I divide and I can't determine why. > > #opened a NetCDF file using python-netcdf4 > > var1 = nc_file.variables['var1'] ###shape = [31,181,360] with a > values ranging from 0 - 243 and NO NaNs in the array, dtype float32 > var2 = nc_file.variables['var2'] ###shape = [31,181,360] with a > values ranging from 0 - 4 (mostly zeros) and NO NaNs in the array, > dtype float32 > > np.seterr(all='ignore') #in case problem has something do to with > dividing by zero > > var1/var2 ###gives array of NaNs with shape of 31,181,360 > > #doing the division one slice at a time doesn't help... > for x in range(1,var1.shape[0]): > var[x,:,:] = var1[x,:,:]/var2[x,:,:] ###gives array of > NaNs with shape of 31,181,360 > > var = np.divide(var1,var2) ###gives array of NaNs with shape of 31,181,360 > > > print "