【发布时间】:2018-06-22 03:37:12
【问题描述】:
我有一个逗号分隔的整数值系列,我想重新采样,这样我就有两倍的整数值,其中一个新值被添加到每个现有值的中间。例如,如果这是我的来源:
1,5,11,9,13,21
结果是:
1,3,5,8,11,10,9,11,13,17,21
如果不清楚,我会尝试在源系列中的每个值之间添加一个数字,如下所示:
1 5 11 9 13 21
1 3 5 8 11 10 9 11 13 17 21
我已经搜索了很多,似乎 scipy.signal.resample 或 panda 之类的东西应该可以工作,但我对此完全陌生,我无法让它工作。例如,这是我对 scipy 的尝试之一:
import numpy as np
from scipy import signal
InputFileName = "sample.raw"
DATA250 = np.loadtxt(InputFileName, delimiter=',', dtype=int);
print(DATA250)
DATA500 = signal.resample(DATA250, 11)
print(DATA500)
哪些输出:
[ 1 5 11 9 13 21]
[ 1. -0.28829461 6.12324489 10.43251996 10.9108191 9.84503237
8.40293529 10.7641676 18.44182898 21.68506897 12.68267746]
显然,我错误地使用了 signal.resample。有没有办法用 signal.resample 或 panda 做到这一点?我应该使用其他方法吗?
此外,在我的示例中,所有源数字之间都有一个整数。在我的实际数据中,情况并非如此。因此,如果其中两个数字是 10,15,则新数字将是 12.5。但是我想让所有的结果数字都是整数。所以插入的新数字需要是 12 或 13(对我来说它是什么并不重要)。
请注意,一旦我完成这项工作,源文件实际上将是一个逗号分隔的 2,000 个数字列表,输出应该是 4,000 个数字(或者技术上说是 3,999,因为不会在末尾添加一个)。此外,这将用于处理类似于 ECG 记录的内容 - 目前 ECG 以 250 Hz 的频率采样 8 秒,然后将其传递给单独的进程以分析记录。然而,这个单独的过程需要以 500 Hz 的频率对记录进行采样。所以工作流程是我每 8 秒进行一次 250 Hz 的记录并将其上采样到 500 Hz,然后将结果输出传递给分析过程。
感谢您提供的任何指导。
【问题讨论】:
-
您只是将这些内容读入然后将它们写出来,除了插值之外没有任何处理?如果是这样,首先不使用
numpy可能更简单。只需对值进行循环,记住最后一个值。然后,每次将if last is not None:写入(last + value) // 2,然后写入value并设置last = value。如果这对你来说更容易理解和编码,谁在乎它在理论上是否不那么优雅? -
谢谢,我更新了描述以表明我所做的只是读入字符串,然后获取输出并将其传递给不同的进程以进行进一步分析。
标签: python pandas numpy interpolation resampling