根据其内容将 numpy 数组拆分为类似的数组
Split numpy array into similar array based on its content
我有一个2D numpy数组,表示一条曲线的坐标(x, y),我想将该曲线分割成相同长度的部分,获取分割点的坐标。
最简单的例子是为两个点定义的线,例如[[0,0],[1,1]],如果我想分割它在 two 部分中,结果将是 [0.5,0.5],对于 three 部分 [[0.33,0.33],[0.67,0.67]] 等等。
如何在数据不太简单的大数组中执行此操作?我正在尝试按长度拆分数组,但结果并不好。
如果我理解的很好,你想要的是一个简单的插值。为此,您可以使用 scipy.interpolate
(http://docs.scipy.org/doc/scipy/reference/tutorial/interpolate.html):
from scipy.interpolate import interp1d
f = interp1d(x, y) ## for linear interpolation
f2 = interp1d(x, y, kind='cubic') ## for cubic interpolation
xnew = np.linspace(x.min(), x.max(), num=41, endpoint=False)
ynew = f(xnew) ## or f2(xnew) for cubic interpolation
您可以创建一个 returns 分割点坐标的函数,给定 x
、y
和所需的点数:
def split_curve(x, y, npts):
from scipy.interpolate import interp1d
f = interp1d(x, y)
xnew = np.linspace(x.min(), x.max(), num=npts, endpoint=False)
ynew = f(xnew)
return zip(xnew[1:], ynew[1:])
例如,
split_curve(np.array([0, 1]), np.array([0, 1]), 2) ## returns [(0.5, 0.5)]
split_curve(np.array([0, 1]), np.array([0, 1]), 3) ## [(0.33333333333333331, 0.33333333333333331), (0.66666666666666663, 0.66666666666666663)]
请注意,x 和 y 是 numpy 数组而不是列表。
取每个轴上的线的长度,根据需要拆分。
示例:
第 1 点:[0,0]
第 2 点:[1,1]
然后:
X 轴上直线的长度:1-0 = 1
也在 Y 轴上。
现在,如果你想把它一分为二,把这些长度分开,然后创建一个新数组。
[0,0],[.5,.5],[1,1]
我有一个2D numpy数组,表示一条曲线的坐标(x, y),我想将该曲线分割成相同长度的部分,获取分割点的坐标。
最简单的例子是为两个点定义的线,例如[[0,0],[1,1]],如果我想分割它在 two 部分中,结果将是 [0.5,0.5],对于 three 部分 [[0.33,0.33],[0.67,0.67]] 等等。
如何在数据不太简单的大数组中执行此操作?我正在尝试按长度拆分数组,但结果并不好。
如果我理解的很好,你想要的是一个简单的插值。为此,您可以使用 scipy.interpolate
(http://docs.scipy.org/doc/scipy/reference/tutorial/interpolate.html):
from scipy.interpolate import interp1d
f = interp1d(x, y) ## for linear interpolation
f2 = interp1d(x, y, kind='cubic') ## for cubic interpolation
xnew = np.linspace(x.min(), x.max(), num=41, endpoint=False)
ynew = f(xnew) ## or f2(xnew) for cubic interpolation
您可以创建一个 returns 分割点坐标的函数,给定 x
、y
和所需的点数:
def split_curve(x, y, npts):
from scipy.interpolate import interp1d
f = interp1d(x, y)
xnew = np.linspace(x.min(), x.max(), num=npts, endpoint=False)
ynew = f(xnew)
return zip(xnew[1:], ynew[1:])
例如,
split_curve(np.array([0, 1]), np.array([0, 1]), 2) ## returns [(0.5, 0.5)]
split_curve(np.array([0, 1]), np.array([0, 1]), 3) ## [(0.33333333333333331, 0.33333333333333331), (0.66666666666666663, 0.66666666666666663)]
请注意,x 和 y 是 numpy 数组而不是列表。
取每个轴上的线的长度,根据需要拆分。
示例: 第 1 点:[0,0] 第 2 点:[1,1]
然后: X 轴上直线的长度:1-0 = 1 也在 Y 轴上。
现在,如果你想把它一分为二,把这些长度分开,然后创建一个新数组。
[0,0],[.5,.5],[1,1]