Re: Problem with numpy 2D Histogram

2014-06-20 Thread Peter Otten
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

2014-06-20 Thread Jamie Mitchell
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

2014-06-20 Thread Peter Otten
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

2014-06-20 Thread Jamie Mitchell
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

2014-06-20 Thread Peter Otten
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

2014-06-20 Thread Jamie Mitchell
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