Преобразуйте число c вектор в спецификацию c длина n R - PullRequest
2 голосов
/ 17 января 2020

У меня есть числа c векторов различной длины, и я хочу "стандартизировать" их длину, скажем, до 100, чтобы сделать их сопоставимыми и преобразовать необработанный сигнал в более гладкую версию.

Мне нужен контроль по длине и параметрам «сглаживания», поэтому я использовал функцию get_dct_transform из пакета syuzhet.

Однако это не очень эффективно для больших необработанных векторов:

set.seed(123)
sample_space = seq(-2, 2, .01)
a = sample(sample_space, 1000, replace = T)
b = sample(sample_space, 10000, replace = T)
c = sample(sample_space, 100000, replace = T)

system.time(syuzhet::get_dct_transform(raw_values = a, low_pass_size = 5))
#  user  system elapsed 
# 0.020   0.000   0.021 

system.time(syuzhet::get_dct_transform(raw_values = b, low_pass_size = 5))
#  user  system elapsed 
# 1.562   0.370   1.937 

system.time(syuzhet::get_dct_transform(raw_values = c, low_pass_size = 5))
#    user  system elapsed 
# 152.802  27.118 180.223 

Существуют ли более быстрые способы выполнения таких преобразований (DCT или FT) в R?

Другой ответ SO предложил функцию fft, но мне понадобится прямой контроль над длиной и параметром фильтра. Та же проблема для emuR::dct.

Я не женат на DCT - другие методы преобразования вектора длины v в «сглаженный» вектор длины n также будет в порядке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...