Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/338.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python basemap.maskoceans:&x27;浮动';对象不能解释为整数_Python_Python 3.x_Numpy_Matplotlib Basemap - Fatal编程技术网

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()
逐像素屏蔽海洋像素。我也遇到了同样的问题。爱德华的解决方案解决了这个问题。谢谢你,爱德华!