1

我正在寻找一些关于我面临的复杂问题的线索,关于 4D 空间中的插值。

我有一个由 3 维空间中的 340 个点组成的数据集(我有三个变量 - A、B、C - 每个由 340 个元素定义)。每个点由输出变量的某个值标识。所以,一般我有

f(A,B,C) = D

我需要对数据集进行插值,以预测设计空间中每个点的 D 值。我所做的是编写一个小脚本,通过numpy方法linalg.lstsq获取多项式m的系数

def polyfit4d(x,y,z, metric, order):
    ncols = (order + 1)**3
    G = np.zeros((x.size, ncols))
    ij = itertools.product(range(order+1), repeat=3)
    for w, (i,j,k) in enumerate(ij):
        G[:,w] = x**i * y**j * z**k

    m, residuals, rank, s = np.linalg.lstsq(G, metric)

    return m, residuals

然后,我使用一个评估函数来获得设计空间所有点的函数值。

def polyval4d(x, y, z, m):
     string = ''
     order = int(math.ceil(((len(m))**(1/3.0))-1))
     ij = itertools.product(range(order+1), repeat=3)
     f = np.zeros_like(x)
     for a, (i,j,k) in zip(m, ij):
     f += a * x**i * y**j * z**k

     return f

由于我的设计空间是 3 维的,我将设计空间的所有点 X、Y、Z 传递给 polyval 函数三个 3D 矩阵。f是输出 D 的 3D 矩阵。该矩阵中的每个点都是 D 的值,该值是通过 polyfit 在设计空间的每个点中计算得出的评估多项式的​​值(抱歉,这句话很棘手)。

然后我要做的是绘制这个 3D 设计空间切片的等高线图。我选择 Z 的一个值,并根据 D 的值绘制由 X、Y 形成的 2D 平面和等高线水平。问题是结果不是我所期望的。等高线图的颜色几乎相同,一个角落有一些变化。

我在互联网上到处搜索,Python wiki 还建议了仅适用于 2D 案例的函数。有没有人遇到过这种问题?我在这个 N 维多项式的评估/定义中遗漏了什么吗?

非常感谢您的关注。

费德里科

4

0 回答 0