实际上,您可以使用每个接受掩码数据的函数( interp2dx, y, z就是这种情况,也可能是其他函数)。但您需要显式创建一个:mgrid
z = ... # Your data
x, y = np.mgrid[0:z.shape[0], 0:z.shape[1]]
Run Code Online (Sandbox Code Playgroud)
然后您需要删除所有这些坐标中的所有屏蔽值:
x = x[~z.mask]
y = y[~z.mask]
z = z[~z.mask]
Run Code Online (Sandbox Code Playgroud)
通过这些最终,x, y, z您可以调用每个指定的函数(接受不完整的网格,因此RectBivariateSpline不起作用)。但请注意,其中一些使用插值框,因此如果由于掩码而丢弃数据的区域太大,则插值将在那里失败(导致np.nan或 0)。但如果发生这种情况,您可以调整参数来弥补这一点。
data = np.random.randint(0, 10, (5,5))
mask = np.random.uniform(0,1,(5,5)) > 0.5
z = np.ma.array(data, mask=mask)
x, y = np.mgrid[0:z.shape[0], 0:z.shape[1]]
x1 = x[~z.mask]
y1 = y[~z.mask]
z1 = z[~z.mask]
interp2d(x1, y1, z1)(np.arange(z.shape[0]), np.arange(z.shape[1]))
array([[ 1.1356716 , 2.45313727, 3.77060294, 6.09790177, 9.31328935],
[ 3.91917937, 4. , 4.08082063, 3.98508121, 3.73406764],
[ 42.1933738 , 25.0966869 , 8. , 0. , 0. ],
[ 1.55118338, 3. , 4.44881662, 4.73544593, 4. ],
[ 5. , 8. , 11. , 9.34152525, 3.58619652]])
Run Code Online (Sandbox Code Playgroud)
你可以看到一小部分 0,因为掩码有很多掩码值:
mask
array([[False, True, True, True, False],
[False, False, True, False, False],
[ True, True, False, True, True],
[False, True, False, True, True],
[False, True, False, False, True]], dtype=bool)
data
array([[2, 4, 4, 5, 5],
[1, 4, 1, 3, 8],
[9, 1, 8, 0, 9],
[7, 2, 0, 3, 4],
[9, 6, 0, 4, 4]])
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8228 次 |
| 最近记录: |