gpt4 book ai didi

python - 多元插值?

转载 作者:行者123 更新时间:2023-11-30 22:04:01 29 4
gpt4 key购买 nike

我有这样的数据。 x 轴为速度,y 轴为功率。这给出了一个情节。但是,还有许多 C 值可以在速度与功率图上给出其他图。

数据是:

C = 12
speed:[127.1, 132.3, 154.3, 171.1, 190.7, 195.3]
power:[2800, 3400.23, 5000.1, 6880.7, 9711.1, 10011.2 ]

C = 14
speed:[113.1, 125.3, 133.3, 155.1, 187.7, 197.3]
power:[2420, 3320, 4129.91, 6287.17, 10800.34, 13076.5 ]

现在,我希望能够在 [[12.2, 122.1], [12.4, 137.3], [12.5, 154.9], [12.6, 171.4], [12.7, 192.6], [12.8, 198.5]] 例如。

我已阅读this回答。我不确定这是否是这样做的方法。

我尝试过:

data = np.array([[12, 127.1, 2800], [12, 132.3, 3400.23], [12, 154.3, 5000.1], [12, 171.1, 6880.7],
[12, 190.7, 9711.1], [12, 195.3, 10011.2],
[14, 113.1, 2420], [14, 125.3, 3320], [14, 133.3, 4129.91], [14, 155.1, 6287.17],
[14, 187.7, 10800.34], [14, 197.3, 13076.5]])

coords = np.array([[12.2, 122.1], [12.4, 137.3], [12.5, 154.9], [12.6, 171.4], [12.7, 192.6], [12.8, 198.5]])

z = ndimage.map_coordinates(data, coords.T, order=2, mode='nearest')

但是,我收到:

array([13076.5, 13076.5, 13076.5, 13076.5, 13076.5, 13076.5])

我不知道如何处理这种插值。

最佳答案

map_coordinates 假设您在每个整数索引处都有项目,就像在图像中一样。 IE。 (0, 0)、(0, 1)...、(0, 100)、(1, 0)、(1, 1)、...、(100, 0)、(100, 1)、... .., (100, 100) 都是在您有 100x100 图像时明确定义的坐标。这不是你的情况。您的数据位于坐标 (12, 127.1)、(12, 132.3) 等位置。

您可以使用griddata来代替。根据您想要的插值方式,您将得到不同的结果:

In [24]: data = np.array([[12, 127.1, 2800], [12, 132.3, 3400.23], [12, 154.3, 5000.1], [12, 171.1, 6880.7],
...: [12, 190.7, 9711.1], [12, 195.3, 10011.2],
...: [14, 113.1, 2420], [14, 125.3, 3320], [14, 133.3, 4129.91], [14, 155.1, 6287.17],
...: [14, 187.7, 10800.34], [14, 197.3, 13076.5]])

In [25]: from scipy.interpolate import griddata

In [28]: coords = np.array([[12.2, 122.1], [12.4, 137.3], [12.5, 154.9], [12.6, 171.4], [12.7, 192.6], [12.8, 198.5]])

In [29]: griddata(data[:, 0:2], data[:, -1], coords)
Out[29]:
array([ nan, 3895.22854545, 5366.64369048, 7408.68906748,
10791.779 , nan])

In [31]: griddata(data[:, 0:2], data[:, -1], coords, method='nearest')
Out[31]: array([ 3320. , 4129.91, 5000.1 , 6880.7 , 9711.1 , 13076.5 ])

In [32]: griddata(data[:, 0:2], data[:, -1], coords, method='cubic')
Out[32]:
array([ nan, 3998.75479082, 5357.54672326, 7297.94115979,
10647.04183455, nan])

method='cubic' 可能对“随机”数据具有最高保真度,但只有您可以决定哪种方法适合您的数据以及您想要执行的操作(默认为 method='线性',用于上面的[29])。

请注意,有些答案是nan。这是因为您给出的输入不在您的点在 2D 空间中形成的“边界多边形”内部。

这是一个可视化,可以向您展示我的意思:

In [49]: x = plt.scatter(x=np.append(data[:, 0], [12.2, 12.8]), y=np.append(data[:, 1], [122.1, 198.5]), c=['green']*len(data[:, 0]) + ['red']*2)

In [50]: plt.show()

bounding polygon

我没有连接绿色的点,但您可以看到红色的两个点位于连接这些点后将形成的多边形之外。您无法在该范围之外进行插值,因此您会得到nan。要了解原因,请考虑一维情况。如果我问您 [0,1,2,3] 索引 2.5 处的值是多少,合理的答案是 2.5。然而,如果我问索引 100 的值是什么……我们先验地不知道 100 的值是什么,它远远超出了你能看到的范围。所以我们无法真正给出答案。对于此功能来说,说它是 100 是错误的,因为这将是外推,而不是插值

HTH。

关于python - 多元插值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53419479/

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