numpy插值与数组值的`yp`

p4rjhz4m  于 2023-08-05  发布在  其他
关注(0)|答案(3)|浏览(67)

我想插值数组值数据,即x值是一维的,但y值是(NumPy)数组。以下操作不起作用:

import numpy as np

xp = np.array([0.0, 1.0, 2.0])
yp = np.array(
    [
        [-1.1, 2.4, 5.1, 5.6],
        [7.1, -2.1, 9.1, 31.0],
        [1.1, 13.4, -5.2, 5.6],
    ]
)

np.interp(0.4, xp, yp)

个字符
有什么提示吗?

o2gm4chl

o2gm4chl1#

def interp(x, xp, fp, left=None, right=None, period=None):
    """
    One-dimensional linear interpolation for monotonically increasing sample points.

    Returns the one-dimensional piecewise linear interpolant to a function
    with given discrete data points (`xp`, `fp`), evaluated at `x`.

    Parameters
    ----------
    x : array_like
        The x-coordinates at which to evaluate the interpolated values.

    xp : 1-D sequence of floats
        The x-coordinates of the data points, must be increasing if argument
        `period` is not specified. Otherwise, `xp` is internally sorted after
        normalizing the periodic boundaries with ``xp = xp % period``.

    fp : 1-D sequence of float or complex
        The y-coordinates of the data points, same length as `xp`.

字符串
fpyp)参数应该是一个一维数组,它应该与xp具有相同的长度。例如,对转置后的yp的每个子列表调用interp将有效

for lst in yp.T:
    print(np.interp(0.4, xp, lst))


输出量:

2.1799999999999997
0.5999999999999999
6.699999999999999
15.76

deyfvvtc

deyfvvtc2#

根据numpy文档
numpy.interp
返回函数的一维分段线性插值函数,该函数具有给定的离散数据点(xp,fp),在x处求值。
参数:xarray_like计算插值的x坐标。
xp 1-D浮点数序列数据点的x坐标,如果未指定参数周期,则必须递增。否则,在用xp = xp % period归一化周期边界之后,对xp进行内部排序。
fp 1-浮点或复数的D序列数据点的y坐标,与xp的长度相同。
但是在你的代码yp中,是2D数组。
你可以使用for循环对数组的每一个集合进行插值。

yp = np.array([np.interp(x, xp, yp[0:, i]) for i in range(yp.shape[1])])
print(yp)
[ 2.18  0.6   6.7  15.76]

字符串

t9aqgxwy

t9aqgxwy3#

正如其他人提到的,np.interp采用1D yp数组,但您提供的是2D数组。我将抛出另一个使用np.apply_along_axis的选项。

res = np.apply_along_axis(lambda _yp: np.interp(0.4, xp, _yp), 0, yp)
print(res)  # [ 2.18  0.6   6.7  15.76]

字符串
为了评论列表解析方法,您可以使用数组的转置来循环数据,而不是使用range和索引,随着数据量的增加,这将 * 稍微 * 快一点。

res = [np.interp(0.4, xp, _yp) for _yp in yp.T]

相关问题