假设我有依赖于4个变量a、b、c和d的数据。我想要插值返回一个2D数组,它对应于单个值的a和b,以及c和d的值数组。但是,数组大小不需要相同。具体来说,我的数据来自晶体管模拟。电流在这里取决于4个变量。我想要绘制参数变化。参数上的点数远少于水平轴上的点数。
import numpy as np
from scipy.interpolate import interpn
arr = np.random.random((4,4,4,4))
x1 = np.array([0, 1, 2, 3])
x2 = np.array([0, 10, 20, 30])
x3 = np.array([0, 10, 20, 30])
x4 = np.array([0, .1, .2, .30])
points = (x1, x2, x3, x4)
以下内容是可用的:xi = (0.1, 9, np.transpose(np.linspace(0, 30, 4)), np.linspace(0, 0.3, 4))
result = interpn(points, arr, xi)
同样如此:
xi = (0.1, 9, 24, np.linspace(0, 0.3, 4))
result = interpn(points, arr, xi)
但不是这个:
xi = (0.1, 9, np.transpose(np.linspace(0, 30, 3)), np.linspace(0, 0.3, 4))
result = interpn(points, arr, xi)
正如您所看到的,在最后一种情况中,xi
中的最后两个数组的大小是不同的。这种功能是否不受Scipy支持,或者我使用interpn
不正确?我需要创建一个图表,其中一个 xi
是参数,而另一个是水平轴。
interpn
... 我假设points
表示你的网格,即每个维度中的“采样点”,用于表示你所知道的值。arr
保存这些已知值。但是,将它们变成随机数意味着很难检查插值是否有效。尝试将它们全部设置为相等,或者更好的方法是在每个四个维度上进行线性插值。xi
应该是你想要知道arr
值的点的 _坐标_。xi
应该是一个有 k 行、4 列(4D 数据)的数组,其中 k 表示点的数量。 - Praveennp.transpose(np.linspace(0, 30, 3))
并不会将其转换为列向量。请阅读有关numpy中1D数组的内容。您需要引入一个新的维度,因此请改用np.linspace(0, 30, 3)[:, np.newaxis]
。但在这种情况下,您不需要这样做,因为我在我的答案中已经展示了。 - Praveen