我有一组纬度(纬度,最小值= -88,最大值= 88,形状= 89)和经度(经度,最小值= 0,最大值= 358,形状= 180)和一个陆地遮罩(land_mask,海洋= 1,土地= 0,形状=(89,180))。
xlon,xlat = np.meshgrid(lons,lats)
PP.pcolormesh(xlon,xlat,land_mask)
PP.colorbar()
PP.show()
我想遍历所有纬度和经度,并对海洋上的纬度/经度对进行计算,但不做任何操作,即如果在陆地上,则移至下一个纬度/经度对。一些伪代码:
# loop over lats
for lat in lats:
# loop over lons
for lon in lons:
# check to see if the current
# lat/lon is in the ocean.
# if True, do something
if (lat,lon) in ocean:
do something
# else if current lat/lon
# over land, do nothing and
# move to the next lat/lon
# pair
else: # ie if over land, skip this point
continue
我不确定如何使用我拥有的2d陆地遮罩执行此操作。也许还有比嵌套循环更快和/或更pythonic的实现此代码的更好方法吗?预先感谢。
答案 0 :(得分:1)
我想象下面的想法会起作用。
import numpy
a = numpy.arange(9).reshape(3, 3)
# array([[0, 1, 2],
# [3, 4, 5],
# [6, 7, 8]])
b = a > 4
# array([[False, False, False],
# [False, False, True],
# [ True, True, True]])
c = numpy.zeros(a.shape)
# array([[0., 0., 0.],
# [0., 0., 0.],
# [0., 0., 0.]])
c[~b] = 1
# array([[1., 1., 1.],
# [1., 1., 0.],
# [0., 0., 0.]])
这意味着您可以使用蒙版仅修改形状相同的数组的特定条目。
答案 1 :(得分:0)
您可以尝试以下方法:
nlats, nlons = land_mask.shape
for i in range(nlons):
for j in range(nlats):
if land_mask(j,i) == 1:
do something
但是这在python中会非常慢。通过将循环替换为矢量化,可以使Numpy操作更快。因此,如果您告诉我们do something
部分应该做什么,可能会有更好的方法。