gpt4 book ai didi

python - 2D线性插值: data and interpolated points

转载 作者:行者123 更新时间:2023-12-01 02:49:39 31 4
gpt4 key购买 nike

考虑这个 y(x) 函数:

enter image description here

我们可以在文件中生成这些散点:dataset_1D.dat:

# x   y   
0 0
1 1
2 0
3 -9
4 -32

以下是这些点的一维插值代码:

  1. 加载这个散点

  2. 创建一个x_mesh

  3. 执行一维插值

代码:

import numpy as np
from scipy.interpolate import interp2d, interp1d, interpnd
import matplotlib.pyplot as plt


# Load the data:
x, y = np.loadtxt('./dataset_1D.dat', skiprows = 1).T

# Create the function Y_inter for interpolation:
Y_inter = interp1d(x,y)

# Create the x_mesh:
x_mesh = np.linspace(0, 4, num=10)
print x_mesh

# We calculate the y-interpolated of this x_mesh :
Y_interpolated = Y_inter(x_mesh)
print Y_interpolated

# plot:

plt.plot(x_mesh, Y_interpolated, "k+")
plt.plot(x, y, 'ro')
plt.legend(['Linear 1D interpolation', 'data'], loc='lower left', prop={'size':12})
plt.xlim(-0.1, 4.2)
plt.grid()
plt.ylabel('y')
plt.xlabel('x')
plt.show()

这绘制了以下内容:

enter image description here

现在,考虑这个 z(x,y) 函数:

enter image description here

我们可以在文件中生成这些散点:dataset_2D.dat:

# x    y    z
0 0 0
1 1 0
2 2 -4
3 3 -18
4 4 -48

在这种情况下,我们必须执行 2D 插值:

import numpy as np
from scipy.interpolate import interp1d, interp2d, interpnd
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D

# Load the data:
x, y, z = np.loadtxt('./dataset_2D.dat', skiprows = 1).T

# Create the function Z_inter for interpolation:
Z_inter = interp2d(x, y, z)

# Create the x_mesh and y_mesh :
x_mesh = np.linspace(1.0, 4, num=10)
y_mesh = np.linspace(1.0, 4, num=10)
print x_mesh
print y_mesh

# We calculate the z-interpolated of this x_mesh and y_mesh :
Z_interpolated = Z_inter(x_mesh, y_mesh)
print Z_interpolated
print type(Z_interpolated)
print Z_interpolated.shape

# plot:
fig = plt.figure()
ax = Axes3D(fig)
ax.scatter(x, y, z, c='r', marker='o')
plt.legend(['data'], loc='lower left', prop={'size':12})
ax.set_xlabel('x')
ax.set_ylabel('y')
ax.set_zlabel('z')

plt.show()

这绘制了以下内容:

enter image description here

其中分散数据再次以红点显示,以与二维图保持一致。

  1. 我不知道如何解释 Z_interpolated 结果:

    根据上面代码的打印行,Z_interpolated 是一个 n 维 numpy 数组,形状为 (10,10)。换句话说,一个 10 行 10 列的 2D 矩阵。

我本来期望 x_mesh[i]y_mesh[i] 的每个值都有一个内插的 z[i] 值,为什么我没有收到这个?

  • 如何在 3D 图中绘制插值数据(就像 2D 图中的黑色十字)?
  • 最佳答案

    Z_interpolated的解读:你的一维 x_meshy_mesh定义了 mesh on which to interpolate 。您的二维插值返回 z因此是一个形状 (len(y), len(x)) 的 2D 数组,与 np.meshgrid(x_mesh, y_mesh) 匹配。正如您所看到的,您的 z[i, i] 而不是 z[i] 是 x_mesh[i] 的预期值。和y_mesh[i] 。它还有更多,网格上的所有值。

    显示所有插值数据的潜在图:

    from mpl_toolkits.mplot3d import Axes3D
    import matplotlib.pyplot as plt
    import numpy as np
    from scipy.interpolate import interp2d

    # Your original function
    x = y = np.arange(0, 5, 0.1)
    xx, yy = np.meshgrid(x, y)
    zz = 2 * (xx ** 2) - (xx ** 3) - (yy ** 2)

    # Your scattered points
    x = y = np.arange(0, 5)
    z = [0, 0, -4, -18, -48]

    # Your interpolation
    Z_inter = interp2d(x, y, z)
    x_mesh = y_mesh = np.linspace(1.0, 4, num=10)
    Z_interpolated = Z_inter(x_mesh, y_mesh)

    fig = plt.figure()
    ax = fig.gca(projection='3d')
    # Plot your original function
    ax.plot_surface(xx, yy, zz, color='b', alpha=0.5)
    # Plot your initial scattered points
    ax.scatter(x, y, z, color='r', marker='o')
    # Plot your interpolation data
    X_real_mesh, Y_real_mesh = np.meshgrid(x_mesh, y_mesh)
    ax.scatter(X_real_mesh, Y_real_mesh, Z_interpolated, color='g', marker='^')
    plt.show()

    enter image description here

    关于python - 2D线性插值: data and interpolated points,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44922766/

    31 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com