matlab中的repmat函数

Repmat function in matlab

我已经解决了一堆关于 MatLab 中 Repeat 函数的问题,但我无法弄清楚这个过程是如何工作的。

我正在尝试将其翻译成 R,但我的问题是我不知道该函数如何操作数据。

该代码是制定配对交易策略的过程的一部分,其中代码采用 FALSE/TRUE 表达式的向量。

密码是:

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

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

其中 shorts 是 TRUE/FALSE 表达式的向量。

希望能帮到你。

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 是如何平铺的)

在您的例子中,repmatshorts 的每个非零元素复制向量 [-1, 1]。因此,您将 positions 的每一行(其在 shorts 中的对应条目不为零)设置为 [-1,1]。所有其他行将保持 NaN

例如如果

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

然后您的代码将创建

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

我希望这可以帮助您阐明 repmat 的效果。如果没有,请随时询问。

repmat重复你给他的矩阵[dim1 dim2 dim3,...]次。您的代码所做的是:

1.-length(find(shorts)):获取shorts中"trues"的数量。

例如:

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 时有效)。

继续例如:

此时,如果您没有遗漏任何内容,positions 应该是一个 6x2 NaN 矩阵。索引将用 [-1 1] 矩阵填充 shortstrue 位置。所以在此之后,职位将是:

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

希望对您有所帮助