2015-01-12 8 views
0

Я прошел через кучу вопросов о функции Repeat в MatLab, но не могу понять, как этот процесс работает.Функция Repmat в matlab

Я пытаюсь перевести его в R, но моя проблема в том, что я не знаю, как функция манипулирует данными.

Код является частью процесса создания стратегии торговли парами, где код принимает вектор выражений FALSE/TRUE.

Код:

% initialize positions array 
positions=NaN(length(tday), 2); 

% long entries 
positions(shorts, :)=repmat([-1 1], [length(find(shorts)) 1]); 

где шорты вектор true/false выражения.

Надеюсь, вы сможете помочь.

+0

http://www.cs.utsa.edu/~cs1173/resources/CS1173RepmatFunction.pdf –

+0

Http: //mathesaurus.sourceforge. net/octave-r.html – Khashaa

ответ

3

repmat повторяет матрицу, которую вы ему даете [dim1 dim2 dim3,...] раз. Что делает ваш код является:

1.-length(find(shorts)): получает количество "истин" в shorts.

например:

shorts=[1 0 0 0 1 0] 
length(find(shorts)) 
ans = 2 

2.-repmat([-1 1], [length(find(shorts)) 1]); повторяет [-1 1][length(find(shorts)) 1] раз.

продолжением например .:

repmat([-1 1], [length(find(shorts)) 1]); 
ans=[-1 1 
    -1 1]; 

3.-positions(shorts, :)= сохраняет заданную матрицу в данных индексах. (ПРИМЕЧАНИЕ !: работает только в том случае, если shorts имеет тип logical).

продолжение например .:

На данный момент, если вы ничего не пропустить, позиции должны быть 6x2NaN матрица. индексирование заполнит true позиции shorts с матрицей [-1 1]. так что после этого, позиции будут:

positions=[-1 1 
      NaN NaN 
      NaN NaN 
      NaN NaN 
      -1 1 
      NaN NaN] 

Надеется, что это помогает

+0

Большое спасибо за помощь Андер. Только то, что мне нужно было понять! – claushojmark

1

Функция MATLAB repmat воспроизводит и разбивает массив. Синтаксис

B = repmat(A,n) 

где A является входным массивом и n определяет, как плитку массива. Если n является вектором [n1,n2] - как в вашем случае - тогда A реплицируется n1 раз в строках и n2 раз в столбцах. Например.

A = [ 1 2 ; 3 4] 
B = repmat(A,[2,3]) 

B =   |   | 
    1  2  1  2  1  2 
    3  4  3  4  3  4 __ 
    1  2  1  2  1  2 
    3  4  3  4  3  4 

(линия только для иллюстрации того, как A получает черепицу)

В вашем случае, repmat дублирует вектор [-1, 1] для каждого ненулевого элемента shorts. Таким образом, вы устанавливаете каждую строку positions, чья соответствующая запись в shorts не равна нулю, до [-1,1]. Все остальные строки останутся NaN.

Например, если

shorts = [1; 0; 1; 1; 0]; 

, то ваш код будет создавать

positions = 
      -1 1 
      NaN NaN 
      -1 1 
      -1 1 
      NaN NaN 

Я надеюсь, что это поможет вам прояснить эффект repmat. Если нет, не стесняйтесь спрашивать.

+0

Вы на 2 секунды быстрее меня! ;) –

+0

И большое спасибо вам. ОЧЕНЬ полезный !! – claushojmark

Смежные вопросы