用3,4或实际上任何尺寸插入和推断数据的一种可能性是scipy.interpolate.Rbf
get_data() function和plot_3d() unify附加到结束方便。
示例数据 h2>
示例数据如下所示(第四维度,w,以颜色显示)。数据不规则间隔,而不是网格。
x, y, z, w = get_data(N=200)
plot_3d(x, y, z, w)
3D h3>中的插值和推断
首先,让我们设置新的x和y坐标。为了使这种更有趣,让我们外推到减去x和减去y方向。这形成了新的x和y的兴趣范围。
xs = np.linspace(-10, 20) # some extrapolation to negative numbers
ys = np.linspace(-10, 20) # some extrapolation to negative numbers
xnew, ynew = np.meshgrid(xs, ys)
xnew = xnew.flatten()
ynew = ynew.flatten()
与@ 987654323插值@。现在,
from scipy.interpolate import Rbf
rbf3 = Rbf(x, y, z, function="multiquadric", smooth=5)
znew = rbf3(xnew, ynew)
plot_3d(xnew, ynew, znew)
- 可以有多种变量/尺寸。第一个参数(@ 987654334,
y)被视为节点的坐标。 function参数之前的最后一个参数是要插值的“值”(现在:z)。
-
function参数可用于控制如何插入值。 这将影响结果,以便使用您的数据玩它。 em>。
-
smooth参数可用于平滑数据的一些噪声。如果smooth为零,结果是插值;它将通过所有数据点。如果是正值,则数据更平滑。 这将影响结果,以便使用您的数据玩它。 em>。
- 以下是结果,推断当然是糟糕的。这只是为了证明推断是可能的。您可能想要微调
function和smooth @ over event结果。通常,数据不应外推“太多”(如在这个例子中)
添加第四维度 h2>
也可以插入和推断到第四维度。这是如何:
rbf4 = Rbf(x, y, z, w, function="thin_plate", smooth=5)
wnew = rbf4(xnew, ynew, znew)
plot_3d(xnew, ynew, znew, wnew)
- 我为第四维创建了另一个@ 987654344,我使用了使用
rbf3(在3D插值)计算的@ 987654345。
- 我改变了
function 987654348 @,因为它似乎在视觉上使用这个数据集 em>来执行更好的。
- 以下结果如何看起来像:
附录:get_data和plot_3d
用于测试目的:
import numpy as np
def get_data():
np.random.seed(100)
N = 200
maxval = 20
x = np.random.random(N) * maxval
y = np.random.random(N) * maxval
z = x ** 2 + np.sqrt(y) * y - y ** 3 + np.random.random(N) + 18 * y ** 2 * 2
w = x ** 2 - np.log(y + (x * y) ** 2)
return x, y, z, w
def plot_3d(x, y, z, w=None, show=True):
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import axes3d
fig = plt.figure(figsize=(10, 6))
ax = axes3d.Axes3D(fig)
ax.scatter3D(x, y, z, c=w if not w is None else "b")
plt.show()