Re: Problem with numpy 2D Histogram
Jamie Mitchell wrote: Hi folks, I'm trying to plot a 2D histogram but I'm having some issues: from pylab import * import numpy as np import netCDF4 hist,xedges,yedges=np.histogram2d(x,y,bins=10) extent=[xedges[0],xedges[-1],yedges[0],yedges[-1]] imshow(hist.T,extent=extent,interpolation='nearest') colorbar() show() After the first line of code I get: TypeError: Cannot cast array data from dtype('O') to dtype('float64') according to the rule 'safe' I'm using python2.7, x and y are type 'numpy.ndarray' The error message complains about the dtype, i. e. the type of the elements in the array, not the array itself. Make sure the elements are floating point numbers or something compatible, not arbitrary Python objects. As a baseline the following works from pylab import * import numpy as np x, y = np.random.randn(2, 100) print x, type(x), x.dtype print y, type(y), y.dtype hist, xedges, yedges = np.histogram2d(x, y, bins=10) extent = [xedges[0], xedges[-1], yedges[0], yedges[-1]] imshow(hist.T, extent=extent, interpolation='nearest') colorbar() show() while this doesn't: #... x, y = np.random.randn(2, 100) import decimal y = np.array([decimal.Decimal.from_float(v) for v in y]) #... -- https://mail.python.org/mailman/listinfo/python-list
Re: Problem with numpy 2D Histogram
On Friday, June 20, 2014 10:25:44 AM UTC+1, Peter Otten wrote: Jamie Mitchell wrote: Hi folks, I'm trying to plot a 2D histogram but I'm having some issues: from pylab import * import numpy as np import netCDF4 hist,xedges,yedges=np.histogram2d(x,y,bins=10) extent=[xedges[0],xedges[-1],yedges[0],yedges[-1]] imshow(hist.T,extent=extent,interpolation='nearest') colorbar() show() After the first line of code I get: TypeError: Cannot cast array data from dtype('O') to dtype('float64') according to the rule 'safe' I'm using python2.7, x and y are type 'numpy.ndarray' The error message complains about the dtype, i. e. the type of the elements in the array, not the array itself. Make sure the elements are floating point numbers or something compatible, not arbitrary Python objects. As a baseline the following works from pylab import * import numpy as np x, y = np.random.randn(2, 100) print x, type(x), x.dtype print y, type(y), y.dtype hist, xedges, yedges = np.histogram2d(x, y, bins=10) extent = [xedges[0], xedges[-1], yedges[0], yedges[-1]] imshow(hist.T, extent=extent, interpolation='nearest') colorbar() show() while this doesn't: #... x, y = np.random.randn(2, 100) import decimal y = np.array([decimal.Decimal.from_float(v) for v in y]) #... Thanks Peter. I have changed my x and y data to float64 types but I am still getting the same error message? Cheers, Jamie -- https://mail.python.org/mailman/listinfo/python-list
Re: Problem with numpy 2D Histogram
Jamie Mitchell wrote: I have changed my x and y data to float64 types but I am still getting the same error message? Please double-check by adding assert x.dtype == np.float64 assert y.dtype == np.float64 If none of these assertions fail try to make a minimal script including some data that provokes the TypeError and post it here. -- https://mail.python.org/mailman/listinfo/python-list
Re: Problem with numpy 2D Histogram
On Friday, June 20, 2014 12:00:15 PM UTC+1, Peter Otten wrote: Jamie Mitchell wrote: I have changed my x and y data to float64 types but I am still getting the same error message? Please double-check by adding assert x.dtype == np.float64 assert y.dtype == np.float64 If none of these assertions fail try to make a minimal script including some data that provokes the TypeError and post it here. OK this is my code: swh_Q0_con_sw=netCDF4.Dataset('/data/cr1/jmitchel/Q0/swh/controlperiod/south_west/swhcontrol_swest_annavg.nc','r') hs_Q0_con_sw=swh_Q0_con_sw.variables['hs'][:] x=hs_Q0_con_sw.astype(float64) # When I print the dtype of x here it says 'float64' mwp_Q0_con_sw=netCDF4.Dataset('/data/cr1/jmitchel/Q0/mean_wave_period/south_west/controlperiod/mwpcontrol_swest_annavg1D.nc','r') te_Q0_con_sw=mwp_Q0_con_sw.variables['te'][:] y=te_Q0_con_sw.astype(float64) If I try assert x.dtype == np.float64 I get: AssertionError hist,xedges,yedges=np.histogram2d(x,y,bins=10) TypeError: Cannot cast array data from dtype('O') to dtype('float64') according to the rule 'safe' Thanks, Jamie -- https://mail.python.org/mailman/listinfo/python-list
Re: Problem with numpy 2D Histogram
Jamie Mitchell wrote: On Friday, June 20, 2014 12:00:15 PM UTC+1, Peter Otten wrote: Jamie Mitchell wrote: I have changed my x and y data to float64 types but I am still getting the same error message? Please double-check by adding assert x.dtype == np.float64 assert y.dtype == np.float64 If none of these assertions fail try to make a minimal script including some data that provokes the TypeError and post it here. OK this is my code: swh_Q0_con_sw=netCDF4.Dataset('/data/cr1/jmitchel/Q0/swh/controlperiod/south_west/swhcontrol_swest_annavg.nc','r') hs_Q0_con_sw=swh_Q0_con_sw.variables['hs'][:] x=hs_Q0_con_sw.astype(float64) # When I print the dtype of x here it says 'float64' mwp_Q0_con_sw=netCDF4.Dataset('/data/cr1/jmitchel/Q0/mean_wave_period/south_west/controlperiod/mwpcontrol_swest_annavg1D.nc','r') te_Q0_con_sw=mwp_Q0_con_sw.variables['te'][:] y=te_Q0_con_sw.astype(float64) If I try assert x.dtype == np.float64 I get: AssertionError That means the dtype is not np.float64. As I have neither the data nor the netCDF4 library to replicate your problem I'm out. What you might try is to construct a numpy array explicitly x = np.array([float(v) for v in swh_Q0_con_sw.variables[hs]]) but that's just a stab in the dark. hist,xedges,yedges=np.histogram2d(x,y,bins=10) TypeError: Cannot cast array data from dtype('O') to dtype('float64') according to the rule 'safe' Thanks, Jamie -- https://mail.python.org/mailman/listinfo/python-list
Re: Problem with numpy 2D Histogram
On Friday, June 20, 2014 9:46:29 AM UTC+1, Jamie Mitchell wrote: Hi folks, I'm trying to plot a 2D histogram but I'm having some issues: from pylab import * import numpy as np import netCDF4 hist,xedges,yedges=np.histogram2d(x,y,bins=10) extent=[xedges[0],xedges[-1],yedges[0],yedges[-1]] imshow(hist.T,extent=extent,interpolation='nearest') colorbar() show() After the first line of code I get: TypeError: Cannot cast array data from dtype('O') to dtype('float64') according to the rule 'safe' I'm using python2.7, x and y are type 'numpy.ndarray' Cheers, Jamie Thanks for your help Peter. -- https://mail.python.org/mailman/listinfo/python-list