import numpy as np from typing import List, Tuple def bilinear_interpolation( X_NUM: int, Y_NUM: int, X: float, Y: float, X0: List[float], Y0: List[float], Z0: np.ndarray ) -> Tuple[float, float, float, List[float]]: """ 双线性插值计算 :param X_NUM: X方向点数 (整数) :param Y_NUM: Y方向点数 (整数) :param X: 目标X坐标 (浮点数) :param Y: 目标Y坐标 (浮点数) :param X0: X坐标数组 (浮点数列表) :param Y0: Y坐标数组 (浮点数列表) :param Z0: 二维数据数组 (numpy.ndarray, 形状为 Y_NUM x X_NUM) :return: 元组 (Z, ZX, ZY, Z_OUT) """ X0_arr = np.array(X0) # 转换为NumPy数组 Z = np.interp(Y, Y0, Z0[:, np.argmin(np.abs(X0_arr - X))]) ZX = (np.interp(Y, Y0, Z0[:, np.argmin(np.abs(X0_arr - X + 0.1))]) - Z) / 0.1 ZY = (np.interp(Y + 0.1, Y0, Z0[:, np.argmin(np.abs(X0_arr - X))]) - Z) / 0.1 Z_OUT = Z0.flatten().tolist() return Z, ZX, ZY, Z_OUT