我想使用三个输入 numpy 数组和一个输出数组在 scipy 中进行 RBF 插值。数据采用以下格式。
x1 = [2, 3, 4, 5, ..., 10, 10]
x2 = [-3, -2.5, ..., 7.5, 7.5]
x3 = [200, 500, 700, ..., 1600, 1600]
y = [7, 8, 9, ..., 40, 42]
spline = scipy.interpolate.Rbf(x1, x2, x3, y)
虽然数据的内容并不重要,但有一些输入条目我们看到多个输出条目,因此插值将失败。
我想使用一个条件来修复这个奇点,如果输入相同,则只保留最小 y 的值。所以在我们的例子中,只有最后一个值 40 会被保留,而 42 需要被丢弃。使用 numpy 操作最快的方法是什么。
因为这个数据可能很大,我不想遍历整个范围。我可以使用
np.unique(np.array([x1, x2, x3]).T, axis=0)
,只获得唯一的条目,但我希望也选择y中相应的最小值。
你可以使用下面的
x1 = [2, 5,10, 10]
x2 = [-3, -2.5,7.5, 7.5]
x3 = [200, 500,1600, 1600]
y = [7, 8, 40, 42]
pd.DataFrame({'x1':x1,'x2':x2,'x3':x3,'y':y}).groupby(['x1','x2','x3']['y'].min().to_list()
答案将是 [7, 8, 40]