python - 获取两个数组中相似元素的掩码并将其应用于第三个数组
问题描述
我有一组花车
x1 = [3418.008 3422.007 3424.007 3425.995 3428.026 3430.003 3539.979 3541.957
3650.041 3654.06 3656.062 3658.066 3660.019 3662.024 3664.024 3666.041
3667.985 3669.976 3672.009 3674.007 3767.969 3769.959 3771.959 3773.976
3775.975 3777.974 3779.97 3781.993 3784.002 3785.993 3787.991 3789.998
3791.997 3794.022 3882.009 3884.043 3886.036 3888.028 3890.007 3890.007
3892.015 3894.018 3895.983 3897.987 3903.978]
和一个不同长度的整数
x2 = [2870 2871 2872 2873 2874 2875 2876 2877 2878 2879 2880 2881 2882 2883 ... 3936 3937 3938 3939 3940 3941].
它们都代表时间,由两种不同的仪器以不同的采样率测量。到 x2 也对应另一个相同长度的数组,
y2 =[ 9.000e-04 -1.000e-03 4.000e-04 -2.000e-03 1.000e-04 -1.600e-03 ... 1.200e-03 3.100e-03 -1.000e-03 6.000e-04]
(也包含零和负数)。这表示作为时间函数 x2 测量的变量。
我想获得 y2 的修改版本,使其仅包含与最接近 x1 最接近元素的 x2 值对应的元素。如果与 x1 最接近的 x2 元素为负数、零或它们的差值大于 epsilon,则 y2_mod 中的对应值也应删除。
我想这意味着对 x2 到 x1 应用某种掩码,获取它的索引,或者可能对 y2 应用相同的掩码?
解决方案
编辑: 我想我第一次误解了这个问题,试试这个。
要找到最接近的元素,您可以使用np.meshgrid
将问题转换为二维并获取数组之间的距离矩阵:
xx1, xx2, = np.meshgrid(x1, x2)
dist = np.abs(xx1 - xx2)
idx = dist.argmin(axis=0)
x2_mod = x2[idx] # same shape as y2_mod
y2_mod = y2[idx] # same shape as x2_mod
从这里您可以根据负值和 epsilon 将屏蔽条件应用于您的数组:
mask = (y2_mod >= 0) & (dist.min(axis=0) < eps)
y2_mod[mask]
从您最近关于平均负值的评论中:
# convolve your signal with an averaging kernel
kernel = [0.5, 0, 0.5]
avg = np.convolve(y2_mod, kernel, mode='same')
# apply boundary conditions (only consider one neighbor)
avg[[0, -1]] = y2_mod[[1, -2]]
# fill in the masked values
mask = y2_mod < 0
y2_mod[mask] = avg[mask]
推荐阅读
- anylogic - Anylogic:流中的系统动力学和随机性(三角形或正态)给出错误的结果
- python-3.x - super().__init__(damage) 未定义变量
- database - 如何将数据库从安装移动到新安装
- javascript - 如果 React Native Function 中的 prop 发生变化,则渲染
- linux - 出现错误:运行 cloudtracker --account demo --list users 时无法从配置文件 config.yaml 加载 yaml
- express - Express.js 的 next() 函数究竟做了什么,在 express 包中的具体位置是什么?
- django - '“错误:未找到 .egg-info 目录”在部署到 heroku 期间
- sql - 为什么将用户函数中的数据插入表变量时使用临时表更快?
- html - 如何在嵌套表上添加位置粘性?
- raspberry-pi - 用于 NXP 微控制器 (MKE06Z64VLH4) 的带覆盆子的 CAN 更新程序