为 scipy 插值修复 numpy 矩阵中的奇点

问题描述 投票:0回答:1

我想使用三个输入 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中相应的最小值。

python arrays numpy matrix scipy
1个回答
0
投票

你可以使用下面的

    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]

© www.soinside.com 2019 - 2024. All rights reserved.