我正在制作模型。结果存储在NetCFD文件中,其中包含每个粒子的lon,lat和time的掩码数据。我想获取每个粒子的lon,lat,time的最后一个实际值。我设法获得了最后一个实数的位置,但没有获得值本身。
您有什么建议吗?
我的代码如下:
lat1= masked_array(data=[[-14.33945369720459, -14.33945369720459, -14.339454650878906,
-14.339454650878906, -14.339454650878906, -14.339454650878906,
-14.339454650878906, -14.339454650878906, -14.339457511901855,
-14.339459419250488, -14.339459419250488, -14.339459419250488,
--, --, --, --, --, --, --, --],
[-5.621851444244385, -5.621865272521973, -5.621881008148193,
-5.621898651123047, -5.621916770935059, -5.621936321258545,
-5.6219563484191895, -5.621973037719727, -5.621990203857422,
-5.622012615203857, -5.622034072875977, -5.622053146362305, --,
--, --, --, --, --, --, --]], mask=[[False, False, False, False, False, False, False, False, False,
False, False, False, True, True, True, True, True, True,
True, True],
[False, False, False, False, False, False, False, False, False,
False, False, False, True, True, True, True, True, True,
True, True]], fill_value=nan, dtype=float32) #latitude values of 2 particles
def last_nonzero(lat1, axis, invalid_val=-9999):
mask = lat1!=0
val = lat1.shape[axis] - np.flip(mask, axis=axis).argmax(axis=axis) - 1
return np.where(mask.any(axis=axis), val, invalid_val)
last_nonzero(lat1, axis=1, invalid_val=-9999) #for each particle, gives the position of the last real number
print lat1[last_nonzero(lat1, axis=1, invalid_val=-9999)]
答案 0 :(得分:0)
如果我理解正确,那么您可以做的是:
获取最后一个非零元素的索引(您已经知道如何获取它们):
>>> last_nonzero_indices = last_nonzero(lat1, axis=1, invalid_val=-9999)
>>> last_nonzero_indices
array([11, 11], dtype=int64)
仅获取初始数组的有效条目:
>>> valid_values = lat1[~lat1.mask]
>>> valid_values
masked_array(data=[-14.33945369720459, -14.33945369720459,
-14.339454650878906, -14.339454650878906,
-14.339454650878906, -14.339454650878906,
-14.339454650878906, -14.339454650878906,
-14.339457511901855, -14.339459419250488,
-14.339459419250488, -14.339459419250488,
-5.621851444244385, -5.621865272521973,
-5.621881008148193, -5.621898651123047,
-5.621916770935059, -5.621936321258545,
-5.6219563484191895, -5.621973037719727,
-5.621990203857422, -5.622012615203857,
-5.622034072875977, -5.622053146362305],
mask=[False, False, False, False, False, False, False, False,
False, False, False, False, False, False, False, False,
False, False, False, False, False, False, False, False],
fill_value=nan,
dtype=float32)
在将返回的数组展平后,从我们之前计算的索引中计算相应的索引:
>>> last_nonzero_indices = np.cumsum(last_nonzero_indices)
>>> last_nonzero_indices
array([11, 22], dtype=int64)
获取所需的最后一个非零值:
>>> valid_values[last_nonzero_indices]
masked_array(data=[-14.339459419250488, -5.622034072875977],
mask=[False, False],
fill_value=nan,
dtype=float32)
尽管我不太喜欢这种解决方案,但希望有人对屏蔽数组有更好的了解可以提出更好的建议。