Python 过滤/插值x、y点到特定点,包括特定点列表

Python 过滤/插值x、y点到特定点,包括特定点列表,python,numpy,scipy,filtering,interpolation,Python,Numpy,Scipy,Filtering,Interpolation,我需要一些帮助来过滤/插入python中的一些数据 我有一个x,y点(大约1500对)的列表,我希望插值到500点,同时尽可能保留细节(而不仅仅是删除2/3的点) 我还想包括一个x点列表,结果数据集必须包括这些x点 有人知道我如何处理这个问题吗?您可以尝试过滤与相邻顶点共线的顶点。 您可以使用向量叉积进行此检查 设p0、p1、p2为arr中的连续点。设A为从p1指向p0的向量,设B为从p1指向p2的向量。如果这些向量的叉积为零,则向量位于同一条线上,可以删除中点 守则: import numpy

我需要一些帮助来过滤/插入python中的一些数据

我有一个x,y点(大约1500对)的列表,我希望插值到500点,同时尽可能保留细节(而不仅仅是删除2/3的点)

我还想包括一个x点列表,结果数据集必须包括这些x点


有人知道我如何处理这个问题吗?

您可以尝试过滤与相邻顶点共线的顶点。 您可以使用向量叉积进行此检查

设p0、p1、p2为
arr
中的连续点。设A为从p1指向p0的向量,设B为从p1指向p2的向量。如果这些向量的叉积为零,则向量位于同一条线上,可以删除中点

守则:

import numpy as np
import matplotlib.pyplot as plt

# First generate dataset similar to yours
# Generate joint points
x0, y0 =np.random.uniform(size=(2,10))
x0.sort() # sort if so it can be used by np.interp()

# Next generate sampling points, add joint points to the set
x = np.hstack((x0, np.random.uniform(size=50)));
x.sort() # sort to have meaningful neghbours

# interpolate at xes
y = np.interp(x, x0, y0)

# compute vector A and B
xa = x[:-2]-x[1:-1]
xb=x[2:]-x[1:-1]
ya=y[:-2]-y[1:-1]
yb=y[2:]-y[1:-1]

# compute cross product
cross = xa*yb-xb*ya

# accept only point which cross-product is above threshold, add the first and the last sample, which were omitted in cross-product calculations
mask = np.hstack([True, abs(cross)>1e-9, True])
# uncomment line below in order to spare additional vertices
# mask[indices_to_keep] = True

# select vertices
xs, ys = x[mask], y[mask]

# draw result
plt.plot(x, y, '-o')
plt.plot(xs, ys, 'x')
plt.show()
结果是:

我认为您需要的是下采样,而不是插值。使用numpy索引:
arr2=arr[1::3]
@Masoud,此操作将导致删除points@Derek伊登,你能告诉我x-E分布是否均匀吗?如果是这样,那么你可以简单地对每3个连续点取一个平均值,比如
arr.reforme(-1,3).mean(axis=-1)
@tstanisl不幸的是,它们不是..有些靠得很近,有些离得更远,但是我很欣赏这个建议。我在我的OP中增加了一个数字来更好地描述我想要做的事情。可能与本地MIX/MAX有什么关系?这取决于你认为“细节”和你实际上想放弃什么。我建议首先通过一个函数运行您的数据,该函数生成您认为最好的500 x坐标,而不是使用一个scipy函数,例如抱歉,我带着数据集离开了我的计算机。我会在可能的情况下在计算机上测试这段代码并提供数据集…这看起来很有希望