将索引添加到 numpy 中索引值周围的索引列表
Add indexes to index list around index value in numpy
我有以下数组:
time = [1e-6, 2e-6, 3e-6, 4e-6, 5e-6, 6e-6, 7e-6, 8e-6, 9e-6, 10e-6]
signal = [0, 10, 3, 2, 1, 0, 10, 2, 2, 5]
并且我想(从两个数组中)删除任何高于阈值的数据点,具有给定的填充宽度
threshold = 9
padding = 3e-6
因此,signal
数组中大于 9 或 time
数组中 100 个数据点内的任何索引都应从两个数组中删除。注意:这意味着如果 padding
window 中有两个数据点在 threshold
之上,则可能存在重叠
示例输出
time_out = [4e-6, 5e-6, 9e-6, 10e-6]
signal_out = [2, 1, 2, 5]
编辑:这个 post 非常相似,但是它只对数组的一个索引执行,我需要在多个索引上执行它(上面例如 time=2e-6 和 time=7e -6)
让我们试试这个。这个想法是创建一个布尔掩码,如果每个 padding
的 signal
超出 threshold
范围,则 returns 为真。我把padding
除以3,因为IIUC,一个padding
是一个大小为3的window,所以我们只需要考虑大于[=的signals
14=] 及其 2 个相邻值。
time_arr = np.array(time)
signal_arr = np.array(signal)
llim = time_arr[signal_arr>threshold, None] - padding/3
ulim = time_arr[signal_arr>threshold, None] + padding/3
msk = ((llim > time_arr) | (ulim< time_arr)).all(axis=0)
time_out = time_arr[msk]
signal_out = signal_arr[msk]
另一种选择是使用 numpy.roll
获取相邻值以创建布尔掩码:
comp = signal_arr<=threshold
msk = np.roll(comp, 1) & comp & np.roll(comp, -1)
time_out = time_arr[msk]
signal_out = signal_arr[msk]
输出:
array([4.e-06, 5.e-06, 9.e-06, 1.e-05])
array([2, 1, 2, 5])
我有以下数组:
time = [1e-6, 2e-6, 3e-6, 4e-6, 5e-6, 6e-6, 7e-6, 8e-6, 9e-6, 10e-6]
signal = [0, 10, 3, 2, 1, 0, 10, 2, 2, 5]
并且我想(从两个数组中)删除任何高于阈值的数据点,具有给定的填充宽度
threshold = 9
padding = 3e-6
因此,signal
数组中大于 9 或 time
数组中 100 个数据点内的任何索引都应从两个数组中删除。注意:这意味着如果 padding
window 中有两个数据点在 threshold
示例输出
time_out = [4e-6, 5e-6, 9e-6, 10e-6]
signal_out = [2, 1, 2, 5]
编辑:这个 post 非常相似,但是它只对数组的一个索引执行,我需要在多个索引上执行它(上面例如 time=2e-6 和 time=7e -6)
让我们试试这个。这个想法是创建一个布尔掩码,如果每个 padding
的 signal
超出 threshold
范围,则 returns 为真。我把padding
除以3,因为IIUC,一个padding
是一个大小为3的window,所以我们只需要考虑大于[=的signals
14=] 及其 2 个相邻值。
time_arr = np.array(time)
signal_arr = np.array(signal)
llim = time_arr[signal_arr>threshold, None] - padding/3
ulim = time_arr[signal_arr>threshold, None] + padding/3
msk = ((llim > time_arr) | (ulim< time_arr)).all(axis=0)
time_out = time_arr[msk]
signal_out = signal_arr[msk]
另一种选择是使用 numpy.roll
获取相邻值以创建布尔掩码:
comp = signal_arr<=threshold
msk = np.roll(comp, 1) & comp & np.roll(comp, -1)
time_out = time_arr[msk]
signal_out = signal_arr[msk]
输出:
array([4.e-06, 5.e-06, 9.e-06, 1.e-05])
array([2, 1, 2, 5])