Python basemap.maskoceans:&x27;浮动';对象不能解释为整数
我得到了一个错误:Python basemap.maskoceans:&x27;浮动';对象不能解释为整数,python,python-3.x,numpy,matplotlib-basemap,Python,Python 3.x,Numpy,Matplotlib Basemap,我得到了一个错误: TypeError: 'float' object cannot be interpreted as an integer 当我调用maskoceans时。为什么会这样?我在跑蟒蛇3 from mpl_toolkits.basemap import Basemap from mpl_toolkits.basemap import maskoceans from mpl_toolkits.basemap import interp from scipy.interpolate
TypeError: 'float' object cannot be interpreted as an integer
当我调用maskoceans
时。为什么会这样?我在跑蟒蛇3
from mpl_toolkits.basemap import Basemap
from mpl_toolkits.basemap import maskoceans
from mpl_toolkits.basemap import interp
from scipy.interpolate import griddata
import matplotlib.pyplot as plt
import numpy as np
places = {
(-8.91508040128176, 52.23826465): 0,
(-6.45854802816101, 52.64127685): 21,
(-9.03867527891856, 52.78809005): 0,
(-8.70926037608263, 53.717247): 0,
(-6.8217677, 54.3303964): 0,
(-6.1658125, 53.5255827): 4
}
m = Basemap(llcrnrlon=-10.56, llcrnrlat=51.39, urcrnrlon=-5.34, urcrnrlat=55.43,
lat_1=30., lat_2=60., lat_0=53.41, lon_0=-7.95,
resolution="i")
x, y, values = np.array([(x, y, v) for (x, y), v in places.items()]).T
coords = np.stack((x, y)).T
x, y = np.mgrid[-11:-4:10j, 51:56:10j]
z = griddata(coords, values, (x, y), method='nearest')
mdata = maskoceans(x, y, z, resolution = 'h', grid = 10, inlands=True)
plt.contour(x[:,0], x[0,:], mdata.T,linewidths=0.5,colors='k',z=99)
plt.contourf(x[:,0], y[0,:], mdata.T,cmap=plt.cm.Purples, z=100)
以下是完整的stacktrack:
Traceback (most recent call last):
File "plot.py", line 28, in <module>
mdata = maskoceans(x, y, z, resolution = 'h', grid = 10, inlands=True)
File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/mpl_toolkits/basemap/__init__.py", line 5107, in maskoceans
_readlsmask(lakes=inlands,resolution=resolution,grid=grid)
File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/mpl_toolkits/basemap/__init__.py", line 5132, in _readlsmask
np.reshape(np.fromstring(lsmaskf.read(),dtype=np.uint8),(nlats,nlons))
File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/numpy/core/fromnumeric.py", line 257, in reshape
return _wrapfunc(a, 'reshape', newshape, order=order)
File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/numpy/core/fromnumeric.py", line 62, in _wrapfunc
return _wrapit(obj, method, *args, **kwds)
File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/numpy/core/fromnumeric.py", line 42, in _wrapit
result = getattr(asarray(obj), method)(*args, **kwds)
TypeError: 'float' object cannot be interpreted as an integer
回溯(最近一次呼叫最后一次):
文件“plot.py”,第28行,在
mdata=maskoceans(x,y,z,分辨率='h',网格=10,内带=True)
文件“/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site packages/mpl_toolkit/basemap/_init___;.py”,第5107行,maskoceans格式
_readlsmask(湖泊=内陆,分辨率=分辨率,栅格=栅格)
文件“/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site packages/mpl_toolkit/basemap/__init___.py”,第5132行,在_readlsmask中
整形(np.fromstring(lsmaskf.read(),dtype=np.uint8),(nlats,nlons))
文件“/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site packages/numpy/core/fromneric.py”,第257行,在“重塑”中
return _wrapfunc(a,‘重塑’、新闻形状、订单=订单)
文件“/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site packages/numpy/core/fromneric.py”,第62行,在
返回_wrapit(对象,方法,*args,**kwds)
文件“/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site packages/numpy/core/fromneric.py”,第42行,在
结果=getattr(asarray(obj),方法)(*args,**kwds)
TypeError:“float”对象不能解释为整数
如果使用Python3,则需要对此文件进行简单更改:
“您的\u python3\u安装\u目录/lib/python3.x/site packages/mpl\u工具包/basemap/init.py”
在第5125行和第5130行之间,找到“nlats=nlons/2”并将其更改为“nlats=nlons//2”
这应该可以解决问题。你能显示完整的错误跟踪吗?@Thomas Kühn添加了错误跟踪。好的,你能做一个快速测试吗:你能试着用python 2运行这段代码吗?没关系,我自己做了测试。它在Python2中工作,因此您遇到的问题与类似,只是对于您来说,我发现的解决方法不起作用,因为您依赖于Basemap。另一方面,我很确定我最近在某个地方玩过maskoceans——我会检查一下。我发现了它,我自己的代码也可以在Python 2下运行。我猜您必须使用Python2,或者找到一种不同的方法来解决您的问题。如果您不介意海岸像素显示为“一半”,请看一看,这是否足够好?同样的问题也存在,它使用
is_land()
逐像素屏蔽海洋像素。我也遇到了同样的问题。爱德华的解决方案解决了这个问题。谢谢你,爱德华!