- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
编辑:编辑代码以产生与 Matlab 一致的结果。见下文。
我正在将 Matlab 脚本转换为 Python,并且线性插值结果在某些情况下有所不同。我想知道为什么以及是否有任何方法可以解决这个问题?
以下是 Matlab 和 Python 中的代码示例以及结果输出(请注意,在本例中 t 恰好等于tin):
MATLAB:
t= [ 736696., 736696.00208333, 736696.00416667, 736696.00625, 736696.00833333, 736696.01041667, 736696.0125];
tin =[ 736696., 736696.00208333, 736696.00416667, 736696.00625, 736696.00833333, 736696.01041667, 736696.0125];
xin = [ nan , 1392., 1406. , 1418. , nan , 1442. , nan];
interp1(tin,xin,t)
ans =
NaN 1392 1406 1418 NaN 1442 NaN
Python(numpy):
(scipy interpolate.interp1d 产生与 numpy 相同的结果)
t= [ 736696., 736696.00208333, 736696.00416667, 736696.00625, 736696.00833333, 736696.01041667, 736696.0125];
tin =[ 736696., 736696.00208333, 736696.00416667, 736696.00625, 736696.00833333, 736696.01041667, 736696.0125];
xin = [ nan , 1392., 1406. , 1418. , nan , 1442. , nan];
x = np.interp(t,tin,xin)
array([ nan, 1392., 1406., nan, nan, nan, nan])
# Edit
# Find indices where t == tin and if the np.interp output
# does not match the xin array, overwrite the np.interp output at those
# indices
same = np.where(t == tin)[0]
not_same = np.where(xin[same] != x[same])[0]
x[not_same] = xin[not_same]
最佳答案
Matlab 似乎在其插值中包含了额外的相等检查。
线性一维插值通常是通过查找跨越输入值x
的两个x值来完成的,然后将结果计算为:
y = y1 + (y2-y1)*(x-x1)/(x2-x1)
如果您传入的 x
值完全等于输入 x 坐标之一,则例程通常会计算出正确的值,因为 x- x1
将为零。但是,如果您的输入数组具有 nan
作为 y1
或 y2
,这些将传播到结果。
根据您发布的代码,我最好的猜测是 Matlab 的插值函数有一个额外的检查,如下所示:
if x == x1:
return y1
并且 numpy 函数没有此检查。
要在 numpy 中实现相同的效果,您可以这样做:
np.where(t == tin,xin,np.interp(t,tin,xin))
关于python - 为什么 Matlab interp1 产生的结果与 numpy interp 不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56032848/
n <- akima :: interp( x, y, z, xo = seq(min(x), max(x), length = 100), yo =
我正在使用一个 numpy 掩码数组来执行一些图像处理。掩膜用于处理图像周围的 NoData 像素(必要的边界,因为这些是原点在无数据像素中的 map 投影图像)。 使用以下代码块,我能够对图像执行高
我有一个包含电阻 (self.interp_data[:,0]) 和相应温度 (self.interp_data[:,1]) 的列表。我想使用 numpy 中的 interp 函数从我测量的电阻中确定
我是 python 编码新手: 我有一个温度列表,对于未记录温度的日子,使用值 9999。我想使用 np.interp tp 通过列表进行插值以删除 9999 和估计值。例如 最大温度 = [40,
我正在尝试将低分辨率曲线(10 个数据点)线性插值到更高分辨率(~1000 个数据点)。我想要的是一条形状相同但具有更多 x 和 y 值的新曲线,即高分辨率和低分辨率曲线在绘制为线条时看起来无法区分。
在我的 C++ 代码中,如果我为每个线程创建一个 tcl interp,并将它用于 Tcl_EvalEx 脚本,并通过 Tcl_GetStringResult 获取结果,这个线程安全吗? 除常量数据外
我有以下问题。我试图找到在 x 坐标的二维数组上使用 numpy 插值方法的最快方法。 import numpy as np xp = [0.0, 0.25, 0.5, 0.75, 1.0] np.r
我正在使用 imwarp 修改这样的图像: WarpedImage=imwarp(Image, tform, 'OutputView', imref2dObject); 我想定义 the manual
使用 interp 函数(Akima 包),可以绘制与数据集的二元插值相对应的表面,请参见下面的示例(来自 interp 文档): library(rgl) data(akima) # data vi
我正在使用 imwarp 修改这样的图像: WarpedImage=imwarp(Image, tform, 'OutputView', imref2dObject); 我想定义 the manual
我遇到了以下问题: 使用不同的代码,我生成生成 x 和 y 值、频率和强度的文件。我使用 2 种不同的方法,因此得到 2 组不同的 x,y。这个想法是将一个与另一个标准化以获得标准化通量。然而,辅助代
我想插入一个 numpy 数组,np.interp 几乎完全符合我的要求: interp(x, xp, fp, left=None, right=None) One-dimensional linea
我有一个 float 的一维数组 A,它大部分都很好,但缺少一些值。丢失的数据被替换为 nan(不是数字)。我必须通过附近良好值的线性插值来替换数组中的缺失值。所以,例如: F7(np.array([
我想将在一组动态频率下进行的测量插入到一组固定频率中。我将 Python 3.7 与 pandas.apply 和 numpy.interp 结合使用: import numpy as np impo
我有以下经验数据: emp_data = np.array([[0.5, -24.111869188789498], [1.0, -30.166986253668671], [1.5, -33.310
numpy.interp 很方便,也比较快。在某些情况下,我想将其输出与传播稀疏值的非插值变体(在“更密集”的输出中)进行比较,结果在稀疏输入之间是分段常数。我想要的函数也可以称为“稀疏 -> 密集”
我正在做一个android项目,需要集成Spotify流媒体功能。现在我可以加载动态库和调用函数了,但是有一些问题。 callbacks.notify_main_thread = callback_n
有人可以建议如何纠正这个问题? Traceback (most recent call last): File "/home/morpheus/.local/lib/python3.8/site-
我目前正在研究一些轻量级 SQL 抽象模块。我的工作流程是这样的,我通常手动编写 SELECT 查询,并通过采用哈希值的 subs 编写 INSERT/UPDATE 查询。 这两个模块似乎都很适合我的
编辑:编辑代码以产生与 Matlab 一致的结果。见下文。 我正在将 Matlab 脚本转换为 Python,并且线性插值结果在某些情况下有所不同。我想知道为什么以及是否有任何方法可以解决这个问题?
我是一名优秀的程序员,十分优秀!