【问题标题】:Is there a simple python 3 command that replicates matlab's interp1 command over multiple columns?是否有一个简单的 python 3 命令可以在多列上复制 matlab 的 interp1 命令?
【发布时间】:2020-07-19 03:23:22
【问题描述】:

是否有一个简单的 python 3 命令可以在多列上复制 matlab 的 interp1 命令?

data_1 包含两个参数(每列 1 个)与 time_1 时间向量一起使用(data_1 是一个 5 x 2 数组,在本示例中实际未使用,因此可以忽略)

data_2 包含两个参数(每列 1 个)与 time_2 时间向量一起使用

import numpy as np
data_2 = np.array([ [ 0.43, -0.54], [ 0.32, -0.83], [ 0.26, -0.94], [ 0.51, -0.69], [ 0.63, -0.74] ])
time_1 = np.array([ 399.87, 399.89, 399.91, 399.93, 399.95 ])
time_2 = np.array([ 399.86, 399.88, 399.90, 399.92, 399.94 ])

我想将 data_2 二维数组插入到 time_1 时间向量中,这样两个数据集将具有相同的时间向量。

所需的输出(这只是两个 data_2 列到 time_1 时间向量中的 np.interp 并合并回一个数组)是:

data_2_i = np.array([[ 0.375, -0.685], [ 0.290, -0.885], [ 0.385, -0.815], [ 0.570, -0.715], [ 0.630, -0.740]])

实际数组将包含大约 20 列(参数)和数千行(更长的时间范围)。
我知道你可以用 np.interp 遍历每一列,但我希望有一个更紧凑、更快的 python 3(numpy、scipy、pandas 等)方法,但我还没有找到。我对 python 还是很陌生(更熟悉 matlab)。

在 matlab 中,您可以在整个多列数组上使用 interp1 来获得多列结果(尽管边缘情况的处理方式略有不同 - NaN 与本示例中的最后一个条目 - 我不担心关于这里的边缘情况差异)。

【问题讨论】:

  • 我不知道有这样的功能。只需编写带有循环的 2 行代码。 Here's 关于 Py 插值的一般帖子

标签: python matlab interpolation


【解决方案1】:

这看起来可行(我自己做了一个快速脚本):

import numpy as np

def interp_multi(x_i, x, y):
    ncol = y.shape[1] 
    y_i = np.zeros((len(x_i),ncol))
    for i in range(ncol):
        y_i[:,i] = np.interp(x_i, x, y[:,i])

    return y_i

data_2_i = interp_multi(time_1, time_2, data_2)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-12
    • 1970-01-01
    • 1970-01-01
    • 2011-04-29
    • 2011-12-18
    • 1970-01-01
    相关资源
    最近更新 更多