Как создать матрицу со смещенной версией вектора отсчетов сигналов любого типа данных в r? - PullRequest
0 голосов
/ 07 мая 2019

Этот вопрос я уже задавал, и здесь я получил требуемый ответ как создать матрицу со смещенной версией вектора сигналов samaples в r? . Но функция, написанная там (принятый ответ), не работает для значений с плавающей запятой входного вектора. Итак, я обнаружил следующее лекарство

library("pracma")

v=seq(1,5.5,by=0.5)
step=2
N <- pracma::numel(v)
index <- seq(N,1,by=-step)
index1<- seq(1,(N+step))
M <- pracma::numel(index)
val=matrix(0,(N+step),M)
for ( i in 1:M)
{
for (j in index1)
 {
     if(j<=index[i])
     { 
      val[j,i] =1
     }

  }
 }

value=matrix(repmat(c(v,integer(step)),1,M),(N+step),M)*val
out=matrix(value[1:(N*M)],N,M)

Какой результат в

> out
     [,1] [,2] [,3] [,4] [,5]
 [1,]  1.0  0.0  0.0  0.0  0.0
 [2,]  1.5  0.0  0.0  0.0  0.0
 [3,]  2.0  1.0  0.0  0.0  0.0
 [4,]  2.5  1.5  0.0  0.0  0.0
 [5,]  3.0  2.0  1.0  0.0  0.0
 [6,]  3.5  2.5  1.5  0.0  0.0
 [7,]  4.0  3.0  2.0  1.0  0.0
 [8,]  4.5  3.5  2.5  1.5  0.0
 [9,]  5.0  4.0  3.0  2.0  1.0
[10,]  5.5  4.5  3.5  2.5  1.5

для шага = 3

> out
     [,1] [,2] [,3] [,4]
 [1,]  1.0  0.0  0.0    0
 [2,]  1.5  0.0  0.0    0
 [3,]  2.0  0.0  0.0    0
 [4,]  2.5  1.0  0.0    0
 [5,]  3.0  1.5  0.0    0
 [6,]  3.5  2.0  0.0    0
 [7,]  4.0  2.5  1.0    0
 [8,]  4.5  3.0  1.5    0
 [9,]  5.0  3.5  2.0    0
[10,]  5.5  4.0  2.5    1

Можно ли дополнительно оптимизировать код, удалив циклы for и сделав его компактной функцией?

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